您好,欢迎访问一九零五行业门户网

PHP中usort在值相同时改变原始位置问题的解决方法_PHP教程

从 php 4.1.0 后,usort 在比较的值相同时,原始位置可能会改变,文档中是这样说的:
if two members compare as equal, their order in the sorted array is undefined.
也就是说,如果比较的2个值相同,则它们在排序结果中的顺序是随机的。如果你需要保持相同值的原始位置,可以参考本文的方法。
演示数据:
复制代码 代码如下:
5, 'b' => 3),
array('a' => 5, 'b' => 1),
array('a' => 5, 'b' => 4),
array('a' => 5, 'b' => 2),
);
?>
数组中第一个元素的值是相同的,期望的结果是保持现有的位置不变,即 b 的顺序为 3,1,4,2
用 usort 排序,当比较字段的值相同时,原始顺序可能会改变
复制代码 代码如下:
$b[a]) ? 1 : -1);');
usort($arr, $callback);
?>
结果:
复制代码 代码如下:
array
(
[0] => array
(
[a] => 5
[b] => 2
)
[1] => array
(
[a] => 5
[b] => 4
)
[2] => array
(
[a] => 5
[b] => 1
)
[3] => array
(
[a] => 5
[b] => 3
)
)
虽然排序字段的值相同,但是 usort 却将整个数组的顺序打乱了。
如果要在比较的值相同时保持原始位置,可以用 array_multisort :
复制代码 代码如下:
$data) {
$a[$key] = $data['a'];
$index[] = $i++;
}
// 第一个数组先排,接着按原始索引排
array_multisort($a, sort_asc, $index, sort_asc, $arr);
?>
结果:
复制代码 代码如下:
array
(
[0] => array
(
[a] => 5
[b] => 3
)
[1] => array
(
[a] => 5
[b] => 1
)
[2] => array
(
[a] => 5
[b] => 4
)
[3] => array
(
[a] => 5
[b] => 2
)
)
http://www.bkjia.com/phpjc/324740.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/324740.htmltecharticle从 php 4.1.0 后,usort 在比较的值相同时,原始位置可能会改变,文档中是这样说的: if two members compare as equal, their order in the sorted array is un...
其它类似信息

推荐信息