Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP不区分大小写排序以不同顺序使用相同数据生成不同结果_Php_Arrays_Sorting - Fatal编程技术网

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"
}