Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP foreach with Nested Array?

I have a nested array in which I want to display a subset of results. For example, on the array below I want to loop through all the values in nested array[1].

 Array (   [0] => Array     (       [0] => one       [1] => Array         (           [0] => 1           [1] => 2           [2] => 3         )     )    [1] => Array     (       [0] => two       [1] => Array         (           [0] => 4           [1] => 5           [2] => 6         )     )    [2] => Array     (       [0] => three       [1] => Array         (           [0] => 7           [1] => 8           [2] => 9         )     ) ) 

I was trying to use the foreach function but I cannot seem to get this to work. This was my original syntax (though I realise it is wrong).

 $tmpArray = array(array("one",array(1,2,3)),array("two",array(4,5,6)),array("three",array(7,8,9)));  foreach ($tmpArray[1] as $value) {   echo $value; } 

I was trying to avoid a variable compare on whether the key is the same as the key I want to search, i.e.

 foreach ($tmpArray as $key => $value) {   if ($key == 1) {     echo $value;   } } 

Any ideas?

like image 430
noangel Avatar asked Sep 10 '10 12:09

noangel


People also ask

How to foreach array in array PHP?

PHP foreach modify array elementsBy using the ampersand operator (&), the foreach statement works with a reference to the array element. <? php $vals = [1, 2, 3, 4, 5]; foreach ($vals as &$val) { $val *= 2; } print_r($vals); In the example, we go through the array of integers and multiply each element by two.

How to foreach multidimensional array PHP?

Answer: Use the PHP nested loop You can simply use the foreach loop in combination with the for loop to access and retrieve all the keys, elements or values inside a multidimensional array in PHP.

How do you use each loop in a multidimensional array?

In the foreach loop, the $element variable will contain the value of the current array item for every iteration. The loop continues till the last element in the array. In the case of the two-dimensional array, we can use the foreach loop to access the first nested array in the first iteration and so on.


1 Answers

If you know the number of levels in nested arrays you can simply do nested loops. Like so:

//  Scan through outer loop foreach ($tmpArray as $innerArray) {     //  Check type     if (is_array($innerArray)){         //  Scan through inner loop         foreach ($innerArray as $value) {             echo $value;         }     }else{         // one, two, three         echo $innerArray;     } } 

if you do not know the depth of array you need to use recursion. See example below:

//  Multi-dementional Source Array $tmpArray = array(     array("one", array(1, 2, 3)),     array("two", array(4, 5, 6)),     array("three", array(             7,             8,             array("four", 9, 10)     )) );  //  Output array displayArrayRecursively($tmpArray);  /**  * Recursive function to display members of array with indentation  *  * @param array $arr Array to process  * @param string $indent indentation string  */ function displayArrayRecursively($arr, $indent='') {     if ($arr) {         foreach ($arr as $value) {             if (is_array($value)) {                 //                 displayArrayRecursively($value, $indent . '--');             } else {                 //  Output                 echo "$indent $value \n";             }         }     } } 

The code below with display only nested array with values for your specific case (3rd level only)

$tmpArray = array(     array("one", array(1, 2, 3)),     array("two", array(4, 5, 6)),     array("three", array(7, 8, 9)) );  //  Scan through outer loop foreach ($tmpArray as $inner) {      //  Check type     if (is_array($inner)) {         //  Scan through inner loop         foreach ($inner[1] as $value) {            echo "$value \n";         }     } } 
like image 189
Alex Avatar answered Oct 03 '22 15:10

Alex