Как я могу сортировать набор фраз в алфавитном порядке, но также учитывать количество слов? Я попробовал sort()
, usort()
и natsort()
, не повезло. Пример:
Cube Pro Duo
Cube Pro
Cube Pro Trio
Я бы ожидал, что "Cube Pro" появится первым, так как он имеет меньше слов, но, похоже, не работает, какой из SORT я использую?
Это должно сработать для вас:
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
)