【问题标题】:How to scan nested arrays in php?如何在php中扫描嵌套数组?
【发布时间】:2015-11-09 18:17:10
【问题描述】:

我想知道如何完全循环遍历数组(例如使用 foreach)以重新排列数据。但是,此数组包含数组,而这些数组包含数组等。例如:

$data= array(
               'key1' => array(
                   'key2' => 'value2', 
                   'key3' => 'value3'
                ),
                'key4' => array(
                   'key5' => 'value5', 
                   'key6' => 'value6'
                )
           )

在这个例子中,我知道我可以只使用两个 foreach 来循环它并执行我需要重新排列数据的操作,但在我的情况下,我不知道有多少数组嵌套在 $data 中,因为我没有没做到,对我来说太大了,不能随便看看。

【问题讨论】:

  • “扫描”到底是什么意思?提取值?计数值?您可能需要一个递归函数。
  • 你的老师因为某种原因而喋喋不休地谈论递归。

标签: php arrays layer


【解决方案1】:

你可以在一个函数中编写你的循环,如果任何子元素是一个数组,你可以调用它,像这样:

function checkArray($array, $value){
    foreach($array as $entry){
        if(is_array($entry)){ 
            checkArray($entry, $value); 
        } else {
            // Do your check and logic here.
        }
    }
}
$example = array( 'key' => array( 'key1' => 'value1', 'key2' => 'value2'), 'key4' => 'value4');
checkArray($example, 'value4');

【讨论】:

    【解决方案2】:

    您可以使用array_walk_recursive() 函数“扫描”数组。此函数将递归到更深的数组中。您将取回数组的每个成员。

    $arr = [[["element1", "element2", ["element3"]]],["element4"]];
    array_walk_recursive($arr, 'test_print');
    function test_print($item, $key)
    {
        echo "$key holds $item\n";
    }
    

    【讨论】:

      【解决方案3】:

      有很多可能性。

      你可以使用递归:

      function scan($array) {
          foreach ($array as $item) {
              if (is_array($item) {
                  scan($item);
                  // ...
              }
              // ...
          }
      }
      

      或者如果你想避免递归,你可以在循环中转换递归

      function scan($array) {
          $stack = [$array];
          do {
              foreach (array_shift($stack) as $item) {
                  if (is_array($item) {
                      $stack[] = $item;
                  }
                  // ...
              }
          } while (count($stack) > 0);
      }
      

      或不同的东西 - 取决于您的需求

      【讨论】:

        猜你喜欢
        • 2013-12-03
        • 1970-01-01
        • 2023-03-30
        • 1970-01-01
        • 2021-09-05
        • 1970-01-01
        • 1970-01-01
        • 2015-07-25
        • 2014-12-27
        相关资源
        最近更新 更多