PHP foreach loop through multidimensional array

20,271

Solution 1

foreach($calculatie_id as $inner_arr)
    foreach($inner_arr as $value)
        echo $value;

Edit: you should try to learn and understand what's going on here. Then, you can do whatever you want with the code I wrote. You said: gives 14561456 I want to use $calculatie_id0=14 $calculatie_id1=56 $calculatie_id2=1456 etc Then, you will have to do something like this:

foreach($calculatie_id as $index => $inner_arr){
    echo "$calculatie_id$index = "
    foreach($inner_arr as $value)
        echo $value;
    echo "<br/>";
}

Or you can create those variables you want (which does not make any sense for me):

foreach($calculatie_id as $index => $inner_arr){
    ${"calculatie_id$index"} = '';
    foreach($inner_arr as $value)
        ${"calculatie_id$index"} .= $value;
    echo ${"calculatie_id$index"}."<br/>";
}

Solution 2

Basically what you have is an array like this:

array(
 array(
  data
 )
)

All you need is:

foreach($yourArray as $innerArray)
 foreach($innerArray as $value)
  echo $value;

That will output what you want. I'm not particularly sure why you're doing a for() loop then a foreach.

Share:
20,271
Muiter
Author by

Muiter

Updated on June 23, 2020

Comments

  • Muiter
    Muiter almost 4 years

    I have an multidimensional array, how can I use it? I want to use each separate array in a for loop.

    What I want to achive is to be able to put each part in my database like entry in db no. 0 -> 1 and 4 entry in db no. 1 -> 5 and 6 entry in db no. 2 -> 1 and 4 and 5 and 6

    I have this code:

    <?php 
        print_r($calculatie_id); 
        for ($i=0; $i<=3; $i++) 
    { 
    ?>  
    <tr> 
        <td> 
    
        <?php 
        foreach ($calculatie_id[$i] as $value) 
        { 
            echo $value; 
        } 
    ?>
    
    print_r($calculatie_id); gives 
    Array ( [0] => Array ( [0] => 4 [1] => 6 ) [1] => Array ( [0] => 1 [1] => 5 ) [2] => Array ( [0] => 5 [1] => 6 ) [3] => )
    

    But when using the foreach I only get 46

    Some extra information:

    This array is created by an multiple select in an for loop. Any other suggestions are welcome.

        for ($i=0; $i<=$aantal_regels_corr; $i++)
    { 
    ?> 
    <tr>
        <td>
    
            <?php 
            // maak select name
            $calculatie_id = 'calculatie_id'.$i;
    
            // rest van formulier
            if($error_vergeten[$i] == "ja"){ $error_omschr = $error_omschr_vergeten[$i]; include('includes/input_error.php'); } ?>&nbsp;<textarea rows="7" cols="80" name="omschrijving[]" /><?php echo $omschrijving[$i]; ?></textarea>
        </td>
        <td colspan="2">
            <select multiple="multiple" width="50" size="7" name="<?php echo $calculatie_id ?>[]" style="width: 150px">
            <?php
                $sql_calc = "select id, naam, actief from sp_calculatie WHERE (offerte_id = '".$row['off_offerte']."' OR offerte_id = '".$offerte_id."') AND actief = 'ja' ORDER BY id ASC";
                $res_calc = mysql_query($sql_calc,$con);  
                while ($row_calc = mysql_fetch_assoc($res_calc)){
            ?>
                <option value="<?php echo $row_calc["id"] ?>"><?php if (empty($row_calc["naam"])) { echo $row_calc["id"]; } else { echo $row_calc["naam"]; } ?></option>
            <?php } ?></select>
        </td>
    </tr>
    <?php } ?>