我有一个$ products数组,如下所示:
Array
(
[0] => Array
(
[0] => 1001
[1] => 1002
)
[1] =>
[2] =>
[3] =>
[4] =>
[5] =>
[6] =>
[7] =>
)
我想遍历它,并创建一个仅包含非空数组数据的一级数组,如下所示:
$newArr = [
[0] => 1001,
[1] => 1002
]
我认为可以工作的foreach循环抛出错误('Invalid argument supplied for foreach()'
)。
foreach循环如下:
$idArr = [];
foreach($products as $value) {
foreach ($value as $id) {
echo $id . '<br>';
$idArr[] = $id;
}
}
这两个值回显表明代码正确,但事实并非如此。我无法将迭代的$ id值存储到$idArr[]
中。
如果任何人都能发现我的一个或多个错误,我将不胜感激。
谢谢!
答案 0 :(得分:1)
您不需要太多更改代码,如果没有价值,您可以跳过内部循环。
$idArr = [];
foreach($products as $value) {
if (!$value) continue; // continue to next iteration without executing the inner loop
foreach ($value as $id) {
$idArr[] = $id;
}
}
或将内部循环括在if ($value) ...
块中。但是,只要您不尝试迭代不存在的数组,就可以。
答案 1 :(得分:0)
<?php
$arrayTest = [
'country' => [
'Russian Federation' => [
'Region' => [
'Moscow',
'Moscow',
'Moscow'
],
'Moscow',
'Moscow',
'Moscow'
],
"United States of America" => [
'Moscow',
'Moscow',
'Moscow'
],
"China" => [
'Moscow',
'Moscow',
'Moscow'
]
],
'union' => [
'Moscow',
'Moscow'
],
'status' => 1,
'age' => 34
];
$result = [];
array_walk_recursive($arrayTest, function ($item, $key) use (&$result) {
$result[] = $item;
});
print_r($result);
?>
答案 2 :(得分:0)
$idArr = array();
foreach($products as $value) {
if(is_array($value)){
foreach ($value as $id) {
$idArr[] = $id;
}
}
}
答案 3 :(得分:0)
您可以使用PHP Spl RecursiveIteratorIterator
$array = array(1,2,array(3,4, array(5,6,7), 8),[0=>1, 1=> [0=>null]], 9);
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($a));
foreach($it as $v) {
echo $v, " ";
}
打印
1 2 3 4 5 6 7 8 1 9
reference已修改为适合您的示例