【发布时间】:2020-09-23 17:33:53
【问题描述】:
这是从我正在做的一个更大的项目中提取的,数据集不一样,但我已经将问题缩小到尽可能小,只是声明一个数组,对其进行排序并转储它,然而问题仍然存在并且可以重现。
这段代码:
<?php
$array = array("Z", "z", "Y", "y", "B", "b", "A", "a");
sort($array, SORT_STRING | SORT_FLAG_CASE);
var_dump($array);
结果:
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"
}
但是这段代码:
<?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"
}
为什么?它是相同的数据,以不同的顺序,以相同的方式排序 - 它肯定应该产生相同的一致输出吗?
我花了几天时间试图弄清楚这一点,这非常令人沮丧。也许这很简单,也许不是。
【问题讨论】:
-
当您忽略大小写时,它们会变成相同的值,并且如手册所述如果两个成员比较相等,则它们在排序数组中的相对顺序是未定义的。跨度>