PHP列表在5. *中保留正常的数组顺序,同时分配值(而不是向后顺序)

时间:2017-11-12 11:40:39

标签: php arrays

根据PHP官方文档,以下示例不应该对输入数组进行排序,因为在PHP 5中将数组值分配给列表变量的顺序相反,所以,$ input [$ j]这是数组的最后一个元素应该被分配给列表的$ input [$ j],因为它是第一个元素,应该保留正常的顺序。但这不会发生。在PHP 5和PHP 7版本中,该函数的行为是相同的,我想知道为什么会发生这种情况。我认为它应该连接到php zval数组表示,但我不明白究竟是怎么回事。所以,如果有人能解释我列表构造的这种行为,那将会很酷。

function bubbleSort(&$input)
{
    for ($i = 0; $i < count($input); $i++)
    {
        for ($j = 0; $j < count($input) - $i - 1; $j++)
        {
            if ($input[$j] > $input[$j+1])
            {
                list($input[$j], $input[$j+1]) = array($input[$j+1], $input[$j]);
            }
        }
    }
}

$input = array(3, 5, 1, 22, 0, 1, 11, 30, 4);
bubbleSort($input);
var_dump($input);

1 个答案:

答案 0 :(得分:0)

我看到你发现了你的功能问题,但我想在这里发布一个答案,因为我发现有关列表结构更改的信息也令人困惑。这个链接非常有用:

http://php.net/manual/en/migration70.incompatible.php#migration70.incompatible.variable-handling.list.order

基本上,PHP 7改变了我所想要的,分配的时间,因此在PHP 5中,它首先在列表参数中分配最正确的值,最左边的值是最后分配的,所以如果你有:

list($a[], $a[], $a[]) = array('x', 'y', 'z')

然后首先分配最右边的$ a [],所以你将有

$a[0] == 'z'  

将值映射到列表构造中的变量是相同的,只是时间不同。

在PHP 7中,首先分配最左边的变量,所以在上面的例子中:

$a[0] == 'x'