PHP嵌套数组循环未定义级别

时间:2018-12-04 16:29:51

标签: php arrays multidimensional-array

我有一个多维嵌套数组。下面的示例是数组的嵌套方式。但是,嵌套的级别数量可能会有所不同。我需要动态地循环通过它们。我想不使用json_encode来执行此操作。有什么想法可以实现吗?

$array = array(
    'brands' => array(
        'codes' => array('b' => "Apple", 'c' => 21, 'd' => 18),
        'items' => array('b' => "Google", 'c' => 22, 'd' => 19),
        'stock' => array('b' => "Samsung", 'c' => 23, 'd' => 20)
    )
);

*更新*

我希望输出看起来像json布局,但不使用json_encode。应该最终看起来像下面的示例。但是巢的级别可能会有所不同:

"brands":{
      "codes":{
         "b":"Apple",
         "c":"21",
         "d":"18"
      },
      "items":{
         "b":"Google",
         "c":"22",
         "d":"19"
      },
      "stock":{
         "b":"Samsung",
         "c":"23",
         "d":"20"
      },
}

2 个答案:

答案 0 :(得分:0)

您可以使用递归函数调用来实现。例如

function walk_array($array) {
  foreach($array as $idx => $val) {
    if(is_array($val)) {
      walk_array($val);
    } else {
      /* found a value, do something with it */
      echo $idx . " = " . $val . "<br>";
    }
  }
}

walk_array($array);

这个想法是在函数walk_array中迭代数组,并检查当前数组元素是否又是数组。如果是这种情况,请通过对找到的数组调用walk_array来开始迭代数组。借助这种技术,可以嵌套数组的深度没有限制。

答案 1 :(得分:0)

我认为您需要的是递归

查看我如何通过打印每个项目的键和值来解决您的问题

$array = array(
    'brands' => array(
        'codes' => array('b' => "Apple", 'c' => 21, 'd' => 18),
        'items' => array('b' => "Google", 'c' => 22, 'd' => 19),
        'stock' => array('b' => "Samsung", 'c' => 23, 'd' => 20)
    )
);

printArray($array);


function printArray($array){

    $keys = array_keys($array);
    foreach($keys as $key){
        $value = $array[$key];
        if(is_array($value)){
            printArray($value);
        }else{
            echo $key . " " . $value . "<br/>";
        }
    }
}