Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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中使数组排序更容易的类,我一直在使用SORT_u常量,但是行为或SORT_uregular(默认排序类型)似乎有所不同,这取决于在数组中添加项的顺序。此外,我无法找出一个模式来解释为什么会出现这种情况 数组项: $a = '0.3'; $b = '.5'; $c = '4'; $d = 'F'; $e = 'z'; $f = 4; sort(array($d, $e, $a, $f, $b, $c)); // Produces... array(6) { [0]=&

我正在开发一个在PHP中使数组排序更容易的类,我一直在使用SORT_u常量,但是行为或
SORT_uregular
(默认排序类型)似乎有所不同,这取决于在数组中添加项的顺序。此外,我无法找出一个模式来解释为什么会出现这种情况

数组项:

$a = '0.3';
$b = '.5';
$c = '4';
$d = 'F';
$e = 'z';
$f = 4;
sort(array($d, $e, $a, $f, $b, $c));

// Produces...
array(6) {
  [0]=>
  string(3) "0.3"
  [1]=>
  string(2) ".5"
  [2]=>
  string(1) "4"
  [3]=>
  string(1) "F"
  [4]=>
  string(1) "z"
  [5]=>
  int(4)
}
sort(array($d, $e, $b, $f, $c, $a));

// Produces...
array(6) {
  [0]=>
  string(3) "0.3"
  [1]=>
  string(2) ".5"
  [2]=>
  string(1) "F"
  [3]=>
  string(1) "z"
  [4]=>
  int(4)
  [5]=>
  string(1) "4"
}
场景1:

$a = '0.3';
$b = '.5';
$c = '4';
$d = 'F';
$e = 'z';
$f = 4;
sort(array($d, $e, $a, $f, $b, $c));

// Produces...
array(6) {
  [0]=>
  string(3) "0.3"
  [1]=>
  string(2) ".5"
  [2]=>
  string(1) "4"
  [3]=>
  string(1) "F"
  [4]=>
  string(1) "z"
  [5]=>
  int(4)
}
sort(array($d, $e, $b, $f, $c, $a));

// Produces...
array(6) {
  [0]=>
  string(3) "0.3"
  [1]=>
  string(2) ".5"
  [2]=>
  string(1) "F"
  [3]=>
  string(1) "z"
  [4]=>
  int(4)
  [5]=>
  string(1) "4"
}
场景2:

$a = '0.3';
$b = '.5';
$c = '4';
$d = 'F';
$e = 'z';
$f = 4;
sort(array($d, $e, $a, $f, $b, $c));

// Produces...
array(6) {
  [0]=>
  string(3) "0.3"
  [1]=>
  string(2) ".5"
  [2]=>
  string(1) "4"
  [3]=>
  string(1) "F"
  [4]=>
  string(1) "z"
  [5]=>
  int(4)
}
sort(array($d, $e, $b, $f, $c, $a));

// Produces...
array(6) {
  [0]=>
  string(3) "0.3"
  [1]=>
  string(2) ".5"
  [2]=>
  string(1) "F"
  [3]=>
  string(1) "z"
  [4]=>
  int(4)
  [5]=>
  string(1) "4"
}
有什么想法吗?

这种行为是“预期的”(或至少是已知的),因为您对值(字符串和整数)使用不同的类型。请参阅该功能的手册

警告

使用混合类型值对数组进行排序时要小心,因为sort()可能会产生不可预知的结果

很可能在排序算法中的某个时刻,它将两个值作为整数而不是字符串进行比较。为了避免这种情况,不要尝试使用不同类型的数组进行排序(如手册所述)。

警告

使用混合类型值对数组进行排序时要小心,因为sort() 可能产生不可预测的结果

您应该使用一个SORT_*常量

这里有一些评论:


SORT\u REGULAR类似于
@hakre:它是关于用于给定排序策略的比较函数/运算符的传递性,而不是稳定性谢谢。。。有趣的解释。我对内部结构不太了解,但我猜所有内容都会与其他内容进行比较,因此无论输入顺序如何,您都会期望得到一致的结果;显然不是这样。谢谢,我实际上正在编写一个单元测试,以确保排序类复制本机PHP算法,这就是我偶然发现这个问题的原因。每次我更改输入时,预期输出的顺序都会更改!我将把它归结为“其中之一”。