如何在php中的多维数组中进行foreach循环

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

我是 php 新手,想了解 foreach 循环。抱歉,如果这是一个题外话,并且之前已经讨论过,但我从其他帖子中找不到什么帮助。

下面是两个不同的数组以及用于获取键值的循环(第一个称为 $size 非常简单,我对此没有任何问题;第二个称为 $size2 循环遍历数组,但我看到错误浏览器中的消息 - 请建议我做错了什么):

one level array:
$size = array(
    "day" => "friday",
    "place" => "office",
    "task" => "smalot",
);
foreach loop to fetch our key-values from $size (it works fine):

foreach ($size as $key => $value) {
    echo $key . "=>" . $value . "";
}
two level array:

$size2 = array(
    "day" => "friday",
    "place" => "office",
    "task" => "smalot",
    "level2" => array(
        "place" => "desk",
        "laptop" => "lenovo",
        "coffee" => "black",
    )
);
foreach loop to fetch our key-values from $size2 (it works not properly):

foreach ($size2 as $key => $value) {
    echo $key . "=>" . $value . "<br>";
    
    foreach ($value as $subkey => $subvalue) {
        echo $subkey . "=>" . $subvalue . "<br>";
        }
}

$size2 的 foreach 循环结果如下:

day=>friday

Warning: foreach() argument must be of type array|object, string given in C:\xampp\htdocs\pdfparser\size.php on line 35
place=>office

Warning: foreach() argument must be of type array|object, string given in C:\xampp\htdocs\pdfparser\size.php on line 35
task=>smalot

Warning: foreach() argument must be of type array|object, string given in C:\xampp\htdocs\pdfparser\size.php on line 35

Warning: Array to string conversion in C:\xampp\htdocs\pdfparser\size.php on line 33
level2=>Array
place=>desk
laptop=>lenovo
coffee=>black

如果我取消注释内部循环,那么我可以从上部数组中获取键值:

foreach ($size2 as $key => $value) {
    echo $key . "=>" . $value . "<br>";
    
//   foreach ($value as $subkey => $subvalue) {
//        echo $subkey . "=>" . $subvalue . "<br>";
//    }
}

result:
day=>friday
place=>office
task=>smalot

Warning: Array to string conversion in C:\xampp\htdocs\pdfparser\size.php on line 33
level2=>Array

但目标是从数组中获取上部和内部键值并且看不到错误消息。我该怎么办?再次感谢!

-

php arrays loops multidimensional-array foreach
1个回答
0
投票

问题是,并非

$size2
数组中的每个元素本身都是数组。当您的 foreach 循环尝试将 '
friday
'、'
office
' 和 '
smalot
' 视为数组以便循环遍历它们时,它会抛出错误,因为它们是 strings,而不是 arrays

您需要在 foreach 循环中添加一个检查,以查看该值是否是一个数组,然后再尝试循环它。

$size2 = array(
    "day" => "friday",
    "place" => "office",
    "task" => "smalot",
    "level2" => array(
        "place" => "desk",
        "laptop" => "lenovo",
        "coffee" => "black",
    )
);

foreach ($size2 as $key => $value) {
    if (is_array($value)) {
        echo $key . " has an inner array:<br>";
        foreach ($value as $subkey => $subvalue) {
            echo $subkey . " => " . $subvalue . "<br>";
        }
    } else {
        echo $key . " => " . $value . "<br>";
    }
}

如果它确实是一个数组,则只会循环遍历

$value

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