В 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.
Спасибо






Вам нужно использовать 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)
}
}
Спасибо, Найджел .. array_multisort сбивает с толку. Ваше замечание пролило свет на проблему.