#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#997003. Я думаю, это потому, что Cake пишется с заглавной буквы
4. @Брэд Ф. Джейкобс: В итоге все элементы имели букву «A».
5. Было бы несколько важно знать, как они в настоящее время структурированы в массиве, и можете ли вы изменить структуру массива. Кроме того, если эти данные поступают из SQL, вы можете выполнить сортировку в запросе на получение.
Ответ №1:
Вы, вероятно, хотите, usort
который позволяет определить функцию обратного вызова компаратора.
Комментарии:
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');