2011-04-19 28 views
3

你能提供一個詳細的解釋爲什麼這代碼:PHP「list」問題:爲什麼結果是相反的?

$arr = array(1, 2, 3); 
list($result[], $result[], $result[]) = $arr; 
print_r($result); 

結果:

Array ([0] => 3 [1] => 2 [2] => 1) 

+0

因爲這是'list()'的工作原理,請參閱。 PHP文檔(http://php.net/list) – knittl 2011-04-19 07:53:49

+0

array_reverse()將解決您的所有問題! – dotty 2011-04-19 07:56:13

回答

11

查看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); } 
; 
+0

所以最右邊的'$ result []'被設置爲'$ arr [0]'。然後會發生什麼? – Greg 2011-04-19 10:03:41

3

由於

列表()分配開始於最右邊的參數的值。如果你使用簡單變量,你不必擔心這一點。但是如果你正在使用帶有索引的數組,你通常會希望數組中索引的順序與從左到右在list()中寫的相同。這不是。它分配以相反的順序

所以實際的答案是:這是如何list作品PHP

0

你所擁有的一切在這個LINK解釋...

它說:

list()分配以最右側參數開始的值。如果你使用簡單變量,你不必擔心這一點。但是如果你正在使用帶有索引的數組,你通常會希望數組中索引的順序與從左到右在list()中寫的相同。這不是。它的分配順序相反

希望它有幫助!