Array_multisort для числа и строки

В 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.

Спасибо

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
468
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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)
  }
}

Спасибо, Найджел .. array_multisort сбивает с толку. Ваше замечание пролило свет на проблему.

user9718914 27.05.2018 22:15

Другие вопросы по теме