类型转换不适用于数组

时间:2011-11-07 14:31:51

标签: php arrays casting

foreach((array)$arr['subarr'] as &$foo)
 ....

......不起作用。它会抛出一个解析错误。

为什么?

4 个答案:

答案 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;