在PHP中,我有这样的数组结构(有些是空的,有些不是,有些是多项):
Array
(
[0] => Array
(
)
[1] => Array
(
[0] => 16534
)
[2] => Array
(
)
[3] => Array
(
[0] => 16532
[1] => 16533
)
[4] => Array
(
)
[5] => Array
(
[0] => 14869
)
}
我想循环遍历这个数组,所以结果我只得到数字(所有数字)。
我是这样尝试的:
foreach ($myarray as $item) {
echo '<pre>' . print_r($item) . '</pre>';
// $result[] = $this->myMethod($item);
}
所以在foreach中,我想在方法中使用array中的所有项。
然而,当我在循环中回显$item时,我得到了如下内容:
Array ( )
Array ( [0] => 16534 )
Array ( )
Array ( [0] => 16532 [1] => 16533 )
Array ( )
Array ( [0] => 14869 )
所以仍然是数组(也是空数组),而不是数字。
你能帮个忙吗?
这就是为什么在打印结果集时要得到一个数组的原因(因为这些值存储在子数组中,而不是循环它们)
为了删除具有空值的子数组,我将使用isset()
,这样您将只获得值。
把你的代码改成这样。
foreach ($myarray as $item) {
foreach($item as $key=>$val){
if(isset($val){
$values[] = $val;
// $result[] = $this->myMethod($values);
}
}
}
只需合并数组,这也将删除空:
foreach(array_merge(...$myarray) as $item) {
// echo '<pre>' . print_r($item) . '</pre>';
$result[] = $this->myMethod($item);
}
这也会起作用,而且可能会更快:
$result = array_map([$this, 'myMethod'], array_merge(...$myarray));
如果您有旧的PHP版本,则必须使用array()
而不是[]
和:
call_user_func_array('array_merge', $myarray)