簡體   English   中英

PHP使用遞歸數組的奇怪行為

[英]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.

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