[英]PHP Loop through array with no index names
在 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 中,我想在我的方法中使用数组中的所有项目。
但是,当我在循环中回显 $item 时,我有这样的事情:
Array ( )
Array ( [0] => 16534 )
Array ( )
Array ( [0] => 16532 [1] => 16533 )
Array ( )
Array ( [0] => 14869 )
所以仍然是 arrays (也是空的),而不是数字。
你能帮忙吗?
更新:我刚刚注意到,一些 arrays 看起来像这样:
[6] => Array
(
[0] => Array
(
[id] => 269
[hours] => 21.0
)
)
[7] => Array
(
[0] => Array
(
[0] => Array
(
[id] => 2
[hours] => 12.0
)
[1] => Array
(
[id] => 7
[hours] => 24.0
)
)
[1] => Array
(
[0] => Array
(
[id] => 2
[hours] => 5.0
)
[1] => Array
(
[id] => 7
[hours] => 0.583
)
)
)
但这里的解决方案不起作用。
这似乎有效,但现在 foreach 在 foreach 解决方案中是残酷的:
foreach ($myarray as $item2) {
foreach ($item2 as $key2 => $val2) {
if (isset($val2)) {
foreach ($val2 as $key4 => $val4) {
echo $val4['id'].',';
}
}
}
}
只需合并也将删除空的数组:
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)
你只是循环通过主数组。这就是为什么你在打印结果集时得到一个数组的原因。(因为这些值存储在子 arrays 中并且你没有循环它们。)
并且要删除带有空值的子 arrays,我将使用isset()
以便您仅获得值。
将您的代码更改为此。
foreach ($myarray as $item) {
foreach($item as $key=>$val){
if(isset($val){
$values[] = $val;
// $result[] = $this->myMethod($values);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.