Запутанная сортировка массивов в PHP

#php #sorting

#php #сортировка

Вопрос:

Каков наилучший способ отсортировать этот массив в алфавитном порядке по String1? Нумерация ключей всегда должна быть числовой.

Перед:

 Key     | String1    Int1 String2 Int2
--------------------------------------
0       | Alligator  3    Cake    7
1       | Crocodile  17   foobar  9
2       | Bear       1    test    6
3       | Aardvark   2    lolwhat 3
  

После:

 Key     | String1    Int1 String2 Int2
--------------------------------------
0       | Aardvark   2    lolwhat 3
1       | Alligator  3    Cake    7
2       | Bear       1    test    6
3       | Crocodile  17   foobar  9     
  

По сути, у меня есть массив, в котором содержится множество массивов, как я могу отсортировать эти массивы внутри первого массива в алфавитном порядке, используя определенный элемент?

Комментарии:

1. В качестве дополнительного примечания, на каком языке, по мнению подсветки синтаксиса, это написано? Почему некоторые слова синие, а другие нет? Cake Важнее, чем test или foobar или lolwhat ?

2. Вы ознакомились с руководством? В комментариях пользователя к sort есть функция, которая может вам помочь: php.net/manual/en/function.sort.php#99700

3. Я думаю, это потому, что Cake пишется с заглавной буквы

4. @Брэд Ф. Джейкобс: В итоге все элементы имели букву «A».

5. Было бы несколько важно знать, как они в настоящее время структурированы в массиве, и можете ли вы изменить структуру массива. Кроме того, если эти данные поступают из SQL, вы можете выполнить сортировку в запросе на получение.

Ответ №1:

Вы, вероятно, хотите, usort который позволяет определить функцию обратного вызова компаратора.

http://www.php.net/manual/en/function.usort.php

Комментарии:

1. Я думаю, что uasort подошел бы лучше, нет?

2. Я попробовал это в реализации, аналогичной их примеру «fruit», каждый элемент был заменен на «A».

3. @Fase: uasort поддерживает ассоциации ключ / значение, что не важно в данном случае, когда ключи, вероятно, являются просто числовыми значениями, основанными на порядке, в котором строки Cyclone были возвращены из базы данных, например, Эта информация может быть отброшена.

Ответ №2:

Вам понадобится функция сравнения, подобная следующей:

 function compare($a, $b)
{
    if ($a['String1'] < $b['String1'])
        return -1;
    if ($a['String1'] > $b['String1'])
        return 1; 

    // At this point the strings are identical and you can go into 
    // a second value to compare something else if you wish 
    if ($a['String2'] < $b['String2'])
        return -1;
    if ($a['String2'] > $b['String2'])
        return 1;

    // as long as you cover the three situations you are fine. 
    return 0
}
  

Ответ №3:

 function str1cmp($a, $b) {
    return strcmp($a['string1'], $b['string1']);
}

usort($array, 'str1cmp');