2009-10-20 15 views
51

Co mówi tytuł. W szczególności jeśli mamJak porównać 2 ciągi alfabetycznie

$array1['name'] = 'zoo'; 
$array2['name'] = 'fox'; 

Jak mogę określić, że alfabetycznie $array2 Nazwy powinny pochodzić przede $array1 's?

+0

Może się okazać [ 's ($ tablica1 [ 'name']) -> compareTo ($ array2 ['name']) '] (https://github.com/deli ght-im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str.php # L495) lub ['s ($ array1 ['name'])) -> compareToIgnoreCase ($ array2 ['name'])'] (https: //github.com/delight-im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str.php#L514) pomocne, jak można znaleźć w [tej samodzielnej bibliotece] (https://github.com/delight-im/PHP -Str). – caw

Odpowiedz

76

Użyj strcmp. Jeśli pierwszy argument do strcmp jest mniejszy leksykograficznie od drugiego, zwracana wartość będzie ujemna. Jeśli oba są równe, to zwróci 0. Jeśli pierwszy jest leksykograficznie większy niż drugi, zwracana jest liczba dodatnia.

nb. Prawdopodobnie chcesz użyć strcasecmp (string1,string2), który ignoruje przypadek ...

8

można porównać oba ciągi z strcmp:

Zwraca < 0 jeśli str1 jest mniejszy niż str2; > 0, jeśli str1 jest większe niż str2, i 0, jeśli są one równe.

1

Często używam natsort (Natural Sort), ponieważ zazwyczaj chcę zachować tablicę do późniejszego użycia.

Przykład:

natsort($unsorted_array); 

var_dump($usorted_array); // will now be sorted. 
7

Jestem trochę późno (potem znowu nie programista był jeszcze w 2009 roku :-) Nikt nie wspomniał jeszcze, ale może po prostu użyć operatorów, których używasz również na numer.

< > <= >= == != więcej

Na przykład:

'a' > 'b' zwraca false

'a' < 'b' powraca true

http://php.net/manual/en/language.operators.comparison.php

+1

Człowieku, to zdecydowanie najlepsza odpowiedź dla tego wątku i nie udało się stworzyć ani jednej wersji! Jeśli potrzebujesz tylko porównać dwa łańcuchy, aby znaleźć ten, który pojawia się jako pierwszy w kolejności alfabetycznej, to zdecydowanie jest to lżejsze, najbardziej sprytne rozwiązanie. Jednak tak głupi, że prawie boli. –

+1

@MarcosBuarque: Doceniam to. Miałem zaledwie 8 lat za późno z moją odpowiedzią :-) – JMRC

Powiązane problemy