2015-05-28 2 views
1

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

Cube Pro Duo 
Cube Pro 
Cube Pro Trio 

Я бы ожидать «Куб Pro», чтобы прийти первым, как это имеет меньше слов, но, кажется, не работает, в зависимости от того СНП я использую?

+2

1. Пожалуйста, добавьте вашу попытку в ваш вопрос 2. Есть ли у вас эти данные в массив? – Rizier123

+0

Natsort() производит: Array ([1] => Cube Pro Duo ~ 53 [2] => Cube Pro Trio ~ 54 [0] => Cube Pro ~ 52) – user3870251

+0

Но я применяю это и к другим фразам. Я пытаюсь получить последовательный способ сортировки массива на 1. количество слов в строке, затем 2. в алфавитном порядке – user3870251

ответ

1

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

usort() это путь здесь. Сначала я сравниваю количество слов, которое я получаю путем подсчета количества пробелов с 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

Большое вам спасибо, это сработало. Экономит день. Я пошел «code blind» – user3870251

+0

@ user3870251 Добро пожаловать. Удачного дня :) – Rizier123

Смежные вопросы