我是 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
但目标是从数组中获取上部和内部键值并且看不到错误消息。我该怎么办?再次感谢!
-
问题是,并非
$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
。