一尘不染

PHP foreach与嵌套数组?

php

我有一个嵌套的数组,我想在其中显示结果的子集。例如,在下面的数组中,我想遍历嵌套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;
  }
}

有任何想法吗?


阅读 268

收藏
2020-05-29

共1个答案

一尘不染

如果您知道嵌套数组中的级别数,则可以简单地执行嵌套循环。像这样:

//  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";
        }
    }
}
2020-05-29