循环未知深度的数组

问题描述 投票:0回答:2

如果数据为1级或超过1级,如何循环数组?

我尝试过

foreach ($array['bGeneral'] as $item) {
    echo $item['bItem'];
}

但是对于具有 1 级数据的数组,会发生错误。

php arrays foreach
2个回答
2
投票

基本上,您需要检查

$array['bGeneral']
的第一个元素是否是数组或数据值,如果是,则以不同的方式处理数据。你可以尝试这样的事情:

if (isset($array['bGeneral']['bItem'])) {
    // only one set of values
    $item = $array['bGeneral'];
    // process item
}
else {
    // array of items
    foreach ($array['bGeneral'] as $item) {
        // process item
    }
}

为了避免重复代码,您可能希望将项目处理代码放在函数中。

或者,当您只有一个值时,您可以创建一个多维数组,然后像处理多个值一样继续处理:

if (isset($array['bGeneral']['bItem'])) {
    $array['bGeneral'] = array($array['bGeneral']);
}
foreach ($array['bGeneral'] as $item) {
    // process item
}

0
投票

不要忘记递归 - 有时它是最好的选择:

function scan_data($data, $path = null) {
    if (!is_array($data))
        echo "{$path} : {$data}\n";
    else
        foreach ($data as $k => $v)
            scan_data($v, $path . '/' . $k);
}

$data = [
    ['a' => 1,                    'b' => 2], 
    ['a' => ['c' => 3, 'd' => 4], 'b' => 5],
    ['a' => 1,                    'b' => ['e' => ['f' => 1, 'g' => 2], 'h' => 6] ]
   ];

scan_data($data);

输出:

/0/a:1
/0/b:2
/1/a/c:3
/1/a/d : 4
/1/b:5
/2/a:1
/2/b/e/f:1
/2/b/e/g : 2
/2/b/小时:6

© www.soinside.com 2019 - 2024. All rights reserved.