【问题标题】:PHP "list" question: Why the result is in reverse order?PHP“列表”问题:为什么结果是相反的?
【发布时间】:2011-08-08 11:11:11
【问题描述】:

您能否详细解释一下这段代码的原因:

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

结果:

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

?

【问题讨论】:

  • 因为这就是list() 的工作方式,参见。 php 文档 (php.net/list)
  • array_reverse() 将解决你所有的问题!

标签: php arrays list


【解决方案1】:

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

【讨论】:

  • 所以最右边的$result[] 设置为$arr[0]。然后会发生什么?
【解决方案2】:

因为

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

所以实际的答案是:这就是list 在 PHP 中的工作方式

【讨论】:

    【解决方案3】:

    LINK@...

    上面写着:

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

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-10
      • 1970-01-01
      • 1970-01-01
      • 2017-10-17
      • 2013-06-05
      • 2021-12-04
      • 1970-01-01
      • 2015-06-26
      相关资源
      最近更新 更多