Jak mogę posortować tę tablicę według wartości klucza „zamówienie”? Mimo że wartości są obecnie sekwencyjne, nie zawsze będą.
Array
(
[0] => Array
(
[hashtag] => a7e87329b5eab8578f4f1098a152d6f4
[title] => Flower
[order] => 3
)
[1] => Array
(
[hashtag] => b24ce0cd392a5b0b8dedc66c25213594
[title] => Free
[order] => 2
)
[2] => Array
(
[hashtag] => e7d31fc0602fb2ede144d18cdffd816b
[title] => Ready
[order] => 1
)
)
Odpowiedzi:
Spróbuj usort , jeśli nadal korzystasz z PHP 5.2 lub wcześniejszego, musisz najpierw zdefiniować funkcję sortowania:
Począwszy od PHP 5.3, możesz użyć anonimowej funkcji:
Wreszcie w PHP 7 możesz użyć operatora statku kosmicznego :
Aby rozszerzyć to na sortowanie wielowymiarowe, odwołaj się do drugiego / trzeciego elementu sortującego, jeśli pierwszy ma wartość zero - najlepiej wyjaśnij poniżej. Możesz także użyć tego do sortowania podelementów.
Jeśli chcesz zachować kluczowe powiązania, użyj
uasort()
- patrz porównanie funkcji sortowania tablic w instrukcjiźródło
uasort()
jeśli chcesz zachować klucze tablicy.źródło
Korzystam z tej funkcji:
źródło
array_multisort
a zatem nie wymaga wstępnej alokacji$sort_col
, oszczędzając czas i pamięć .&$arr
zamiast po prostu$arr
?Zwykle używam usort i przekazuję własną funkcję porównywania. W tym przypadku jest to bardzo proste:
W PHP 7 za pomocą operatora statku kosmicznego:
źródło
$a['order']
jest 3, a$b['order']
ma 6, zwrócę -3. Poprawny?Jedno podejście do osiągnięcia tego byłoby takie
Wynik:
źródło
Aby posortować tablicę według wartości klucza „tytuł”:
strcmp porównaj ciągi.
Funkcja uasort () utrzymuje klucze tablicy tak, jak zostały zdefiniowane.
źródło
Dotyczy to zarówno wielkich, jak i małych liter.
źródło
Użyj
array_multisort()
,array_map()
PRÓBNY
źródło
array_multisort
odwołuje się do pierwszego parametru.Najbardziej elastycznym podejściem byłoby zastosowanie tej metody
dlatego:
Możesz sortować według dowolnego klucza (również zagnieżdżonego jak
'key1.key2.key3'
lub['k1', 'k2', 'k3']
)Działa zarówno na tablicach asocjacyjnych, jak i nie asocjacyjnych (
$assoc
flaga)Nie używa referencji - zwraca nową posortowaną tablicę
W twoim przypadku byłoby to tak proste jak:
Ta metoda jest częścią tej biblioteki .
źródło
Spójrzmy prawdzie w oczy: php NIE ma prostej, gotowej do użycia funkcji, aby poprawnie obsługiwać każdy scenariusz sortowania tablic.
Ta procedura jest intuicyjna, co oznacza szybsze debugowanie i konserwację:
źródło
global
jest ogromną czerwoną flagą i ogólnie jest odradzane . Dlaczegomysql_fetch_array
zademonstrowano to pytanie zamiast tablicy źródłowej OP i że nie ma wyjaśnienia, co robi Twój kod i czego można oczekiwać po wyniku? Ogólnie jest to bardzo złożone podejście do osiągnięcia pożądanego rezultatu końcowego.global
see: 3v4l.org/FEeFC To tworzy wyraźnie zdefiniowaną zmienną, a nie zmienną, która może być zmieniana i dostępna globalnie.Możesz także sortować tablicę wielowymiarową pod kątem wielu wartości, takich jak as
z
Wyjście przy użyciu
print_r($arr)
:PS) użycie strcmp byłoby dobrym rozwiązaniem do porównania ciągów.
źródło