[英]PHP Strange behaviour with recursive arrays
$array = array();
$array[ 'recursive' ] =& $array;
$array[ 'foo' ] = $array;
'foo'
是按值分配給$array
,它應該復制$array
,當時沒有'foo'
鍵,所以我希望現在的情況如下:
$array = array(
'recursive' => &$array,
'foo' => array(
'recursive' => &$array
),
)
但如果我現在這樣做:
var_dump( isset( $array[ 'foo' ][ 'foo' ][ 'foo' ] ) );
我明白了:
bool(true)
我不明白為什么會這樣。
如果我為'foo'
的賦值創建一個中間變量,如下所示:
$array = array();
$array[ 'recursive' ] =& $array;
$blah = $array;
$array[ 'foo' ] = $blah;
var_dump( isset( $array[ 'foo' ][ 'foo' ][ 'foo' ] ) );
我明白了:
bool(false)
我理解為什么'recursive'
鍵會無限深,因為它是通過引用分配的,但為什么'foo'
鍵是由值賦值的? 如何為值處理的事物創建中間變量更改行為?
因為當你執行$ array ['foo'] = $ array時,解釋器首先將'foo'索引添加到$ array值,然后將新更新的數組放入$ array ['foo']中。
當你使用中間$ blah時,你在創建'foo'鍵之前存儲了一個未修改的$ array副本。 中間件不會改變行為,它會在創建中間件的時刻存儲值的副本,就像它應該的那樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.