你能提供一個詳細的解釋爲什麼這代碼:PHP「list」問題:爲什麼結果是相反的?
$arr = array(1, 2, 3);
list($result[], $result[], $result[]) = $arr;
print_r($result);
結果:
Array ([0] => 3 [1] => 2 [2] => 1)
?
你能提供一個詳細的解釋爲什麼這代碼:PHP「list」問題:爲什麼結果是相反的?
$arr = array(1, 2, 3);
list($result[], $result[], $result[]) = $arr;
print_r($result);
結果:
Array ([0] => 3 [1] => 2 [2] => 1)
?
查看PHP文檔爲list
:
列表()分配值先從最右邊的參數。如果你使用簡單變量,你不必擔心這一點。但是如果你正在使用帶有索引的數組,你通常會希望數組中索引的順序與從左到右在list()中寫的相同。這不是。它的分配方式爲反向訂單。
如果你想知道爲什麼它確實如此,那麼原因可能是,一個從右到左的分配更容易使用LALR(1)語法分析器,您通常使用只剩實施手側遞歸出於性能原因:
assignment_list:
assignment_list ',' assignment_list_element
| assignment_list_element
;
assignment_list_element:
variable { zend_do_add_list_element(&$1 TSRMLS_CC); }
| T_LIST '(' { zend_do_new_list_begin(TSRMLS_C); } assignment_list ')' { zend_do_new_list_end(TSRMLS_C); }
| /* empty */ { zend_do_add_list_element(NULL TSRMLS_CC); }
;
所以最右邊的'$ result []'被設置爲'$ arr [0]'。然後會發生什麼? – Greg 2011-04-19 10:03:41
由於
列表()分配開始於最右邊的參數的值。如果你使用簡單變量,你不必擔心這一點。但是如果你正在使用帶有索引的數組,你通常會希望數組中索引的順序與從左到右在list()中寫的相同。這不是。它分配以相反的順序
所以實際的答案是:這是如何list作品PHP
你所擁有的一切在這個LINK解釋...
它說:
list()分配以最右側參數開始的值。如果你使用簡單變量,你不必擔心這一點。但是如果你正在使用帶有索引的數組,你通常會希望數組中索引的順序與從左到右在list()中寫的相同。這不是。它的分配順序相反
希望它有幫助!
因爲這是'list()'的工作原理,請參閱。 PHP文檔(http://php.net/list) – knittl 2011-04-19 07:53:49
array_reverse()將解決您的所有問題! – dotty 2011-04-19 07:56:13