PHP“;列表“;问题:为什么结果是相反的顺序?

PHP“;列表“;问题:为什么结果是相反的顺序?,php,arrays,list,Php,Arrays,List,您能否详细解释一下为什么会出现这种代码: $arr = array(1, 2, 3); list($result[], $result[], $result[]) = $arr; print_r($result); 结果: Array ( [0] => 3 [1] => 2 [2] => 1 ) ?参见PHP文档了解: list()指定从最右边的参数开始的值。如果您使用的是普通变量,则不必担心这一点。但是,如果使用带有索引的数组,通常期望数组中的索引顺序与在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); }
;
因为

list()指定从最右边的参数开始的值。如果您使用的是普通变量,则不必担心这一点。但是,如果使用带有索引的数组,通常期望数组中的索引顺序与在list()中编写的相同,从左到右;但事实并非如此。它是按相反的顺序分配的


因此,实际的答案是:这就是PHP的工作原理

您已经对此进行了详细解释

它说:

list()指定从最右边的参数开始的值。如果您使用的是普通变量,则不必担心这一点。但是,如果使用带有索引的数组,通常期望数组中的索引顺序与在list()中编写的相同,从左到右;但事实并非如此。它是按相反的顺序分配的


希望有帮助

因为这就是
list()
的工作原理,请参阅。php文档()数组\u reverse()将解决您的所有问题!因此,最右边的
$result[]
设置为
$arr[0]
。然后呢?