PHP不区分大小写排序以不同顺序使用相同数据生成不同结果
这是从我正在从事的一个更大的项目中提取出来的,数据集不一样,但我已经将问题缩小到尽可能小的程度,只声明一个数组,对它进行排序并转储它,但问题仍然存在,并且是可复制的 此代码:PHP不区分大小写排序以不同顺序使用相同数据生成不同结果,php,arrays,sorting,Php,Arrays,Sorting,这是从我正在从事的一个更大的项目中提取出来的,数据集不一样,但我已经将问题缩小到尽可能小的程度,只声明一个数组,对它进行排序并转储它,但问题仍然存在,并且是可复制的 此代码: <?php $array = array("Z", "z", "Y", "y", "B", "b", "A", "a"); sort($array, SO
<?php
$array = array("Z", "z", "Y", "y", "B", "b", "A", "a");
sort($array, SORT_STRING | SORT_FLAG_CASE);
var_dump($array);
但是这个代码:
<?php
$array = array("Z", "z", "Y", "y", "b", "B", "a", "A");
sort($array, SORT_STRING | SORT_FLAG_CASE);
foreach( $array as $ar )
{
echo $ar . PHP_EOL;
}
为什么??它是相同的数据,以不同的顺序,以相同的方式进行排序-当然它应该产生相同的一致输出
我花了几天的时间试图弄明白这一点,这是非常令人沮丧的。可能很简单,也可能不简单。正如Nigel的评论已经解释了结果不一致的原因,这里有一个解决方法来获得所需的一致性
当您忽略大小写时,它们会变成相同的值,正如手册所述,如果两个成员比较相等,则它们在排序数组中的相对顺序是未定义的。
<?php
$array = array("Z", "z", "Y", "y", "b", "B", "a", "A");
sort($array, SORT_STRING | SORT_FLAG_CASE);
foreach( $array as $ar )
{
echo $ar . PHP_EOL;
}
array(8) {
[0]=>
string(1) "a"
[1]=>
string(1) "A"
[2]=>
string(1) "b"
[3]=>
string(1) "B"
[4]=>
string(1) "Y"
[5]=>
string(1) "y"
[6]=>
string(1) "Z"
[7]=>
string(1) "z"
}