我有一个嵌套的数组,我想在其中显示结果的子集。例如,在下面的数组中,我想遍历嵌套array [1]中的所有值。
数组 ( [0] =>数组 ( [0] =>一 [1] =>数组 ( [0] => 1 [1] => 2 [2] => 3 ) ) [1] =>数组 ( [0] =>两个 [1] =>数组 ( [0] => 4 [1] => 5 [2] => 6 ) ) [2] =>数组 ( [0] =>三个 [1] =>数组 ( [0] => 7 [1] => 8 [2] => 9 ) ) )
我试图使用foreach函数,但似乎无法正常工作。这是我的原始语法(尽管我意识到这是错误的)。
$ 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; }
我试图避免对键是否与我要搜索的键相同的变量进行比较,即
foreach($ tmpArray as $ key => $ value){ 如果($ key == 1){ echo $ value; } }
有任何想法吗?
如果您知道嵌套数组中的级别数,则可以简单地执行嵌套循环。像这样:
// 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; } }
如果您不知道数组的深度,则需要使用递归。请参见下面的示例:
// 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"; } } } }
下面的代码仅显示嵌套数组,其中包含适用于您特定情况的值(仅限第3级)
$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"; } } }