根据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);
答案 0 :(得分:0)
我看到你发现了你的功能问题,但我想在这里发布一个答案,因为我发现有关列表结构更改的信息也令人困惑。这个链接非常有用:
基本上,PHP 7改变了我所想要的,分配的时间,因此在PHP 5中,它首先在列表参数中分配最正确的值,最左边的值是最后分配的,所以如果你有:
list($a[], $a[], $a[]) = array('x', 'y', 'z')
然后首先分配最右边的$ a [],所以你将有
$a[0] == 'z'
将值映射到列表构造中的变量是相同的,只是时间不同。
在PHP 7中,首先分配最左边的变量,所以在上面的例子中:
$a[0] == 'x'