你能提供一个详细的解释为什么这代码:PHP“list”问题:为什么结果是相反的?
$arr = array(1, 2, 3);
list($result[], $result[], $result[]) = $arr;
print_r($result);
结果:
Array ([0] => 3 [1] => 2 [2] => 1)
?
你能提供一个详细的解释为什么这代码:PHP“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); }
;
所以最右边的'$ result []'被设置为'$ arr [0]'。然后会发生什么? – Greg 2011-04-19 10:03:41
由于
列表()分配开始于最右边的参数的值。如果你使用简单变量,你不必担心这一点。但是如果你正在使用带有索引的数组,你通常会希望数组中索引的顺序与从左到右在list()中写的相同。这不是。它分配以相反的顺序
所以实际的答案是:这是如何list作品PHP
你所拥有的一切在这个LINK解释...
它说:
list()分配以最右侧参数开始的值。如果你使用简单变量,你不必担心这一点。但是如果你正在使用带有索引的数组,你通常会希望数组中索引的顺序与从左到右在list()中写的相同。这不是。它的分配顺序相反
希望它有帮助!
因为这是'list()'的工作原理,请参阅。 PHP文档(http://php.net/list) – knittl 2011-04-19 07:53:49
array_reverse()将解决您的所有问题! – dotty 2011-04-19 07:56:13