【问题标题】:Show All Data list of multidimensional array Using Foreach Loop使用 Foreach 循环显示多维数组的所有数据列表
【发布时间】:2019-03-06 07:04:45
【问题描述】:

这是我的数组代码...

$data = array(
            'data_1',
            'data_2',
            'data_3',
            'data_4',
            'data_5' => array(
                            'data_5_1',
                            'data_5_2'
                        )
);

我想像这样输出:-

data_1
data_2
data_3
data_4
data_5
    data_5_1
    data_5_2

这是我尝试自我编写的代码,但显示错误

foreach($data as $da){ 
     echo $da."<br>";
}

发现这样的错误

data_1
data_2
data_3
data_4
Notice: Array to string conversion in filename.php on line 3
Array

请修复此问题并使用 echo 而不是 print_r

【问题讨论】:

标签: php arrays multidimensional-array


【解决方案1】:

这最好通过递归函数来实现,这样您就可以处理任何级别的嵌套数组:

function display_list($array) {
    foreach ($array as $k => $v) {
        if (is_array($v)) {
            echo "$k\n";
            display_list($v);
        }
        else {
            echo "$v\n";
        }
    }
}
display_list($data);

输出:

data_1
data_2
data_3 
data_4 
data_5 
data_5_1 
data_5_2

Demo on 3v4l.org

【讨论】:

【解决方案2】:

你可以使用迭代器:

foreach(new RecursiveIteratorIterator(new RecursiveArrayIterator($data)) as $item)
  echo "$item<br>", PHP_EOL;

如 cmets 中所要求的,如果您想要取决于类型的键或值,您可以使用标志 SELF_FIRST 和三元运算符:

foreach(new RecursiveIteratorIterator(new RecursiveArrayIterator($data), RecursiveIteratorIterator::SELF_FIRST) as $key => $item)
  echo (is_scalar($item) ? $item : $key) . '<br>', PHP_EOL;

【讨论】:

  • 这很酷,但它不会打印出data_5 key 值...
  • @Nick 我添加了一个版本,当项目是数组时也显示键。
  • 现在看起来不错,虽然它失去了第一个版本所具有的一些良好的清洁度。可惜……
【解决方案3】:
foreach ($data as $val) {
    if(is_array($val)){
        foreach ($val as $row) {
            echo "<br>&nbsp;&nbsp;&nbsp;&nbsp;".$row;
        }
    }
    else{ 
         echo "<br>".$val;
    }
}

【讨论】:

  • data_5 未在输出中找到
猜你喜欢
  • 2015-05-08
  • 2015-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多