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

时间:2011-04-19 07:51:24

标签: php arrays list

您是否可以提供有关此代码原因的详细说明:

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

结果:

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

3 个答案:

答案 0 :(得分:11)

请参阅list的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); }
;

答案 1 :(得分:3)

由于

  

list()分配以最右侧参数开头的值。如果您使用的是纯变量,则不必担心这一点。但是如果你使用带索引的数组,你通常会期望数组中索引的顺序与list()中从左到右的顺序相同;它不是。它以相反的顺序分配

所以实际的答案是:list在PHP中的作用

答案 2 :(得分:0)

你有关于LINK ...

的一切解释

它说:

  

list()分配以最右侧参数开头的值。如果您使用的是纯变量,则不必担心这一点。但是如果你使用带索引的数组,你通常会期望数组中索引的顺序与list()中从左到右的顺序相同;它不是。它以相反的顺序分配

希望它有所帮助!