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]
。然后呢?