PHP, отсортируйте массив в зависимости от его записей (xNUMBERxNUMBERxNUMBER)

В PHP ниже пример массива:

$version = [
    "x3x3x2",
    "x10x11x0",
    "x180x7x1",
    "x10x1x7",
    "x2x0x4",
    "x3x3x1",
]

Каждая запись следует этому шаблону «xNxNxN» (символ «x» и число N, три раза)

Я хочу отсортировать каждую запись этого массива по номерам слева направо. Результат, как и ожидалось:

$version = [
    "x2x0x4",
    "x3x3x1",
    "x3x3x2",
    "x10x1x0",
    "x10x11x7",
    "x180x7x1",
]

Как я могу это сделать ?

зачем тебе эти данные? Потому что это выглядит очень искусственно, поэтому, если это просто домашнее задание, ответ есть, и этот ответ не является правильным ответом для «настоящего» кода.

Mike 'Pomax' Kamermans 10.04.2019 17:46

Функция usort() была создана для подобных случаев использования.

esqew 10.04.2019 17:46

Пробовали ли вы какие-либо стандартные функции сортировки PHP и обнаруживали, что они делают не то, что вам нужно?

RiggsFolly 10.04.2019 17:47
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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 и хотите разрабатывать...
4
3
56
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Есть встроенная функция для сравнения номеров версий. Просто объедините это с usort.

usort($version, 'version_compare');

Результат:

var_dump($version);
array(6) {
  [0]=>
  string(6) "x2x0x4"
  [1]=>
  string(6) "x3x3x1"
  [2]=>
  string(6) "x3x3x2"
  [3]=>
  string(7) "x10x1x7"
  [4]=>
  string(8) "x10x11x0"
  [5]=>
  string(8) "x180x7x1"
}

Простое решение, сохраняя только числа и сортируя их с помощью usort

usort($version,function($a,$b){
    $astr = preg_replace("/[^0-9\.]/", '', $a);
    $bstr = preg_replace("/[^0-9\.]/", '', $b);
    return $astr - $bstr;
});
print_r($version);

усортировать — Сортировка массива по значениям с помощью определяемой пользователем функции сравнения.

Демо.

Это отсортирует x1x10x10 после x2x1x1. Я предполагаю, что это нежелательно, поскольку подразумевается, что строки являются номерами версий.

Matt Raines 11.04.2019 17:07

@MattRaines Я тестировал, вы можете проверить здесь. Он работает нормально.

Rahul 12.04.2019 09:01

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