您是否可以提供有关此代码原因的详细说明:
$arr = array(1, 2, 3);
list($result[], $result[], $result[]) = $arr;
print_r($result);
结果:
Array ( [0] => 3 [1] => 2 [2] => 1 )
答案 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()中从左到右的顺序相同;它不是。它以相反的顺序分配
希望它有所帮助!