foreach((array)$arr['subarr'] as &$foo)
....
......不起作用。它会抛出一个解析错误。
为什么?
答案 0 :(得分:2)
您无法转换为数组,同时将这些项目用作参考。
$foo
它真的不是一个阵列会发生什么?
转换仅适用于循环。
$arr['subarr'] = array('one', 'two');
// make sure we have an array
if (!is_array($arr['subarr'])) {
$arr['subarr'] = array($arr['subarr']);
}
foreach($arr['subarr'] as &$foo) {
print($foo);
}
答案 1 :(得分:2)
为什么?
这可能会对此有所启发,但我不确定是否是这种情况。至少它是有道理的:
如果使用&$foo
,则希望为迭代的每个值设置别名。但是当你强制转换数组时,它不作为值存在,PHP无法为它创建别名(或者至少这没有意义)。
相反:
foreach ((array)$arr['subarr'] as &$foo)
这样做,有效,也可能是您正在寻找的东西:
$subarray = (array) $arr['subarr'];
foreach ($subarray as &$foo)
或
$arr['subarr'] = (array) $arr['subarr'];
foreach ($arr['subarr'] as &$foo)
答案 2 :(得分:0)
有什么问题:
foreach($arr['key'] as $foo){}
或者你的目标是:
foreach($arr as $key => $foo)
其中$ arr是数组,$ key是索引,$ foo是值?
答案 3 :(得分:0)
如果你想检查$arr['subarr']
是否是一个数组,然后跳过代码块,如果不是那么你可以使用它 -
if(is_array($arr['subarr'])) :
foreach($arr['subarr'] as &$foo) :
{Your code here}
endforeach;
endif;