在PHP中,与字符相比,数字的ASCII值是否较低?我理解array_multisort是如何工作的,但是当涉及数字和字符时,如果我们按升序排序,它将首先出现。
这是PHP array_multisort的示例。
$ar = array(
array("10", 11, 100, 100, "a"), //10
array( 1, 2, "2", 3, 1)
);
array_multisort($ar[0], SORT_ASC, SORT_STRING,
$ar[1], SORT_NUMERIC, SORT_DESC);
var_dump($ar);
array(2) {
[0]=>
array(5) {
[0]=>
string(2) "10"
[1]=>
int(100)
[2]=>
int(100)
[3]=>
int(11)
[4]=>
string(1) "a"
}
[1]=>
array(5) {
[0]=>
int(1)
[1]=>
int(3)
[2]=>
string(1) "2"
[3]=>
int(2)
[4]=>
int(1)
}
}
查看上面的示例,我们从“10”开始,作为搜索中的第一个值。为什么搜索排序11不是下一个值,但是当我们按升序排序时,它将100作为下一个值?
然后array_multisort跳转到第二个数组,因为它在第一个搜索中有两个100。
谢谢
答案 0 :(得分:1)
您需要使用SORT_NATURAL
按照预期的顺序对它们进行排序。 (与natsort
相同)
$ar = array(
array("10", 11, 100, 100, "a"), //10
array( 1, 2, "2", 3, 1)
);
array_multisort($ar[0], SORT_ASC, SORT_NATURAL,
$ar[1], SORT_NUMERIC, SORT_DESC );
var_dump($ar);
...输出
array(2) {
[0] =>
array(5) {
[0] =>
string(2) "10"
[1] =>
int(11)
[2] =>
int(100)
[3] =>
int(100)
[4] =>
string(1) "a"
}
[1] =>
array(5) {
[0] =>
int(1)
[1] =>
int(2)
[2] =>
int(3)
[3] =>
string(1) "2"
[4] =>
int(1)
}
}