簡體   English   中英

類型強制轉換不適用於數組

[英]Type cast not working on array

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

...不起作用 它將引發解析錯誤。

為什么?

您不能轉換為數組,並且不能同時使用這些項目作為參考。

$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);
}

為什么?

這可能會給它帶來一些啟示,但是我不確定這是否是事實。 至少有一定道理:

如果使用&$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)

出什么問題了:

foreach($arr['key'] as $foo){}

或者您的目標是:

foreach($arr as $key => $foo)

$ arr是數組,$ key是索引,$ foo是值嗎?

如果您要檢查$arr['subarr']是否為數組,然后跳過不是這樣的代碼塊,則可以使用此代碼-

if(is_array($arr['subarr'])) :
    foreach($arr['subarr'] as &$foo) :
        {Your code here}
    endforeach;
endif;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM