Как отсортировать по количеству слов и по алфавиту?

1

Как я могу сортировать набор фраз в алфавитном порядке, но также учитывать количество слов? Я попробовал sort(), usort() и natsort(), не повезло. Пример:

Cube Pro Duo
Cube Pro
Cube Pro Trio

Я бы ожидал, что "Cube Pro" появится первым, так как он имеет меньше слов, но, похоже, не работает, какой из SORT я использую?

  • 2
    1. Пожалуйста, добавьте вашу попытку в свой вопрос 2. У вас есть эти данные в массиве?
  • 0
    Natsort () создает: Array ([1] => Cube Pro Duo ~ 53 [2] => Cube Pro Trio ~ 54 [0] => Cube Pro ~ 52)
Показать ещё 1 комментарий
Теги:
sorting

1 ответ

1
Лучший ответ

Это должно сработать для вас:

usort() - это путь сюда. Сначала я сравниваю количество слов, которое я получаю путем подсчета amout пробелов с помощью substr_count(). Если количество слов равно, я просто делаю strcasecmp() для сравнения обеих строк. Если количество слов отличается, я просто сравниваю их.

<?php

    $arr = ["Cube Pro Duo", "Cube Pro", "Cube Pro Trio"];

    usort($arr, function($a, $b){
        $countA = substr_count($a, " ")+1;
        $countB = substr_count($a, " ")+1;

        if($countA == $countB) {
            return strcasecmp($a, $b);
        } else {
            return $countA > $countB ? 1 : -1;
        }
    });

    print_r($arr);

?>

вывод:

Array
(
    [0] => Cube Pro
    [1] => Cube Pro Duo
    [2] => Cube Pro Trio
)
  • 0
    Большое спасибо, это сработало. Спас день. Я пошел "слепой код"
  • 0
    @ user3870251 Пожалуйста. Удачного дня :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню