2011-04-19 26 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()中写的相同。这不是。它的分配顺序相反

希望它有帮助!