Looping through arrays

Discussion in 'PHP' started by assgar, Apr 20, 2007.

  1. #1
    Hello

    I have changed the process code abit so it receives
    the data from the form and ensures the data in array format.
    This has eliminated my previous error.

    The problem I am experiencing is the looping is not
    displaying the all contents of the arrays.

    Do you have any idea what the problem is and how to fix the problem?



    
    <html>
    <head></head>
    
    <body>
    <!-----------------------form processor---------------------------->
    <form  action="../common_list_process.php"  method="post">
    <table>
    <tr>
      <td>         <input type="submit" name="fee_button" value="Submit"
                 style="color: #ff6600;font-weight:bold; margin-right: 5;"/> </td>
    </tr>
    
    </table>
    
    <?php
    	display();//display form selection and input boxes	
    ?>
    	
    </form>
    </body>
    </html>
    
    
    HTML:
    
    
    <?php
      
      /***------------display function------------**/
      //display form selection and input boxes
      
      function display()
      {
    
       $op = array();//create empty array
     
      /****This form consist of multiple rows  like this****/
       echo "<table>\n";
       echo "<tr height=\"10\">\n";
       echo "<td width=\"9%\" bgcolor=\"#fff8dc\" align=\"\"><span class=\"style15\">
              <input type=\"checkbox\" name=\"choice[]\" value=\"A1\">
               <span class=\"style1\" >A1</span></span></td>
    	 <td width=\"2%\" bgcolor=\"#fff8dc\" height=\"10\">
    	   <input type=\"text\" name=\"unit[]\" size=\"1\" maxlength=\"2\" value =\"$a_unit\"/></td>
             <td width=\"32%\" bgcolor=\"#ebeae0\" class=\"style11\">General</td>
      	 <td width=\"2%\" bgcolor=\"#fff8dc\" height=\"10\">
    	   <input type=\"text\" name=\"money[]\" size=\"1\" maxlength=\"2\" value =\"$money\"/></td>\n";
            
      echo "<td width=\"9%\" bgcolor=\"#fff8dc\" align=\"\"><span class=\"style15\">
             <input type=\"checkbox\" name=\"op[choice][]\" value=\"A7\">
              <span class=\"style1\" >A7</span></span></td>
             <td width=\"2%\" bgcolor=\"#ebeae0\" height=\"10\">
              <input type=\"text\" name=\"op[unit][]\" size=\"1\" maxlength=\"2\" value =\"$a_unit\"/></td>
             <td width=\"32%\" bgcolor=\"#ebeae0\" class=\"style11\">Intermediate</td>\n";
    	 <td width=\"2%\" bgcolor=\"#fff8dc\" height=\"10\">
    	   <input type=\"text\" name=\"money[]\" size=\"1\" maxlength=\"2\" value =\"$money\"/></td>\n";
      echo "</tr>\n";
      echo "</table>\n";
      
    $all[] = choice;
    $all[] = unit;
    $all[] = money;
    
      return $all; 
    
      }
    
    list($choice, $unit, $money) = display(); //unpack array
    
    ?>
    
    
    PHP:


    
    
    /***********common_list_process.php*************/
    
    $fee1_choice  = $_POST['choice'];
    if(is_array($fee1_choice ))
        {
    	$fee1_choice = array_filter($fee1_choice );
        }
        else
    	{
               $fee1_choice = array("$fee1_choice ");
      	   $fee1_choice = array_filter($fee1_choice);
            }
    $fee1_unit = $_POST['unit'];
    if(is_array($fee1_unit))
        {
    	$fee1_unit = array_filter($fee1_unit);
        }
        else
    	{
       	   $fee1_unit = array("$fee1_unit");
    	   $fee1_unit = array_filter($fee1_unit);
    	}
    $fee1_money = $_POST['fee_money'];
    if(is_array($fee1_money))
        {
    	$fee1_money = array_filter($fee1_money);
        }
        else
    	{
      	   $fee1_money = array("$fee1_money");
    	   $fee1_money = array_filter($fee1_money);
    	}
    
    /*****This loops the arrays to display the array contents***/
    
        $indices2 = array_keys($fee1_choice);
        foreach($indices2 as $index2)
          {
              //individual value validation from 3 arrays
              echo "|". $fee1_choice[$index2];
              echo "|". $fee1_unit[$index2];
              echo "|". $fee1_money[$index2] .'<br />';
          }
    
    PHP:

    /*****---result of array contents--*****/
    echo '<pre>',print_r ($_POST, TRUE), '</pre>';//check array values

    This display the selected data in the arrays

    [choice] => Array
    (
    [0] => A001
    [1] => A004
    [2] => A008
    )

    [unit] => Array
    (
    [0] => 1
    [1] =>
    [2] => 2
    [3] =>
    [4] => 3
    [5] =>
    [6] =>
    [146] =>
    )

    [fee_money] => Array
    (
    [0] => 17.75
    [1] =>
    [2] => 30.70
    [3] =>
    [4] => 10.25
    [5] =>
    [6] =>



    /*****----result of loop-------*****/

    |A001|1|17.75
    |A004||
    |A008|2|30.70
     
    assgar, Apr 20, 2007 IP
  2. Xcap

    Xcap Peon

    Messages:
    25
    Likes Received:
    1
    Best Answers:
    0
    Trophy Points:
    0
    #2
    What output do you want?
     
    Xcap, Apr 21, 2007 IP
  3. Chamaro Zwinkels

    Chamaro Zwinkels Peon

    Messages:
    44
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    0
    #3
    Yes, if we know your wanted output, we can say something ;)
     
    Chamaro Zwinkels, Apr 21, 2007 IP
  4. Subikar

    Subikar Active Member

    Messages:
    241
    Likes Received:
    4
    Best Answers:
    0
    Trophy Points:
    60
    #4
    Please instead of code pls describe properly so we can help you out smoothly.
     
    Subikar, Apr 21, 2007 IP
  5. assgar

    assgar Peon

    Messages:
    50
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    0
    #5
    Hi

    Good questions.


    /*****----result of loop-------*****/

    |A001|1|17.75
    |A004||
    |A008|2|30.70


    /***** result should be *******/

    |A001|1|17.75
    |A004|2|30.70
    |A008|3|10.25
     
    assgar, Apr 21, 2007 IP
  6. Meth_

    Meth_ Well-Known Member

    Messages:
    1,063
    Likes Received:
    72
    Best Answers:
    0
    Trophy Points:
    140
    #6
    this post confused me 0_0
    I think what you're looking for is php.net/foreach
     
    Meth_, Apr 21, 2007 IP
  7. assgar

    assgar Peon

    Messages:
    50
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    0
    #7
    Thanks for the interest and suggestions.

    Problem Solved.

    Using a for loop to incement the array index syncronizes the array indexes.

    I think using a two-dimentional array would be better but I don't how to do that yet.

    This is the code that resolved the problem.


    
    <html>
    <head></head>
    
    <body>
    <!-----------------------form processor---------------------------->
    <form  action="../common_list_process.php"  method="post">
    <table>
    <tr>
      <td>         <input type="submit" name="fee_button" value="Submit"
                 style="color: #ff6600;font-weight:bold; margin-right: 5;"/> </td>
    </tr>
    
    </table>
    
    <?php
    	display();//display form selection and input boxes	
    ?>
    	
    </form>
    </body>
    </html>
    
    
    HTML:
    
    
    <?php
      
      /***------------display function------------**/
      //display form selection and input boxes
      
      function display()
      {
    
       $op = array();//create empty array
     
      /****This form consist of multiple rows  like this****/
       echo "<table>\n";
       
    for($i=0; $i < 4; $i++)
      {
       
       echo "<tr height=\"10\">\n";
       echo "<td width=\"9%\" bgcolor=\"#fff8dc\" align=\"\"><span class=\"style15\">
              <input type=\"checkbox\" name=\"choice[$i]\" value=\"A1\">
               <span class=\"style1\" >A1</span></span></td>
    	 <td width=\"2%\" bgcolor=\"#fff8dc\" height=\"10\">
    	   <input type=\"text\" name=\"unit[$i]\" size=\"1\" maxlength=\"2\" value =\"$a_unit\"/></td>
             <td width=\"32%\" bgcolor=\"#ebeae0\" class=\"style11\">General</td>
      	 <td width=\"2%\" bgcolor=\"#fff8dc\" height=\"10\">
    	   <input type=\"text\" name=\"money[$i]\" size=\"1\" maxlength=\"2\" value =\"$money\"/></td>\n";
            
      echo "<td width=\"9%\" bgcolor=\"#fff8dc\" align=\"\"><span class=\"style15\">
             <input type=\"checkbox\" name=\"choice[$i]\" value=\"A7\">
              <span class=\"style1\" >A7</span></span></td>
             <td width=\"2%\" bgcolor=\"#ebeae0\" height=\"10\">
              <input type=\"text\" name=\"unit[$i]\" size=\"1\" maxlength=\"2\" value =\"$a_unit\"/></td>
             <td width=\"32%\" bgcolor=\"#ebeae0\" class=\"style11\">Intermediate</td>\n";
    	 <td width=\"2%\" bgcolor=\"#fff8dc\" height=\"10\">
    	   <input type=\"text\" name=\"money[$i]\" size=\"1\" maxlength=\"2\" value =\"$money\"/></td>\n";
      echo "</tr>\n";
     } 
      
    echo "</table>\n";
    $all = array(); 
    
    $all[] = 'choice';
    $all[] = 'unit';
    $all[] = 'money';
    
      return $all; 
    
      }
    
    list($choice, $unit, $money) = display(); //unpack array
    
    ?>
    
    
    PHP:


    
    
    /***********common_list_process.php*************/
    
    $fee1_choice  = $_POST['choice'];
    if(is_array($fee1_choice ))
        {
    	$fee1_choice = array_filter($fee1_choice );
        }
        else
    	{
               $fee1_choice = array("$fee1_choice ");
      	   $fee1_choice = array_filter($fee1_choice);
            }
    $fee1_unit = $_POST['unit'];
    if(is_array($fee1_unit))
        {
    	$fee1_unit = array_filter($fee1_unit);
        }
        else
    	{
       	   $fee1_unit = array("$fee1_unit");
    	   $fee1_unit = array_filter($fee1_unit);
    	}
    $fee1_money = $_POST['fee_money'];
    if(is_array($fee1_money))
        {
    	$fee1_money = array_filter($fee1_money);
        }
        else
    	{
      	   $fee1_money = array("$fee1_money");
    	   $fee1_money = array_filter($fee1_money);
    	}
    
    /*****This loops the arrays to display the array contents***/
    
        $indices2 = array_keys($fee1_choice);
        foreach($indices2 as $index2)
          {
              //individual value validation from 3 arrays
              echo "|". $fee1_choice[$index2];
              echo "|". $fee1_unit[$index2];
              echo "|". $fee1_money[$index2] .'<br />';
          }
    
    PHP:
     
    assgar, Apr 22, 2007 IP