Seřazení pole v PHP
Řazení pole je velice jednoduchá věc, protože nám PHP nabízí spoustu sort funkcí. Problém nastává až v případě, kdy chceme seřadit pole určitým způsobem, pro který ani jedna z funkcí nevyhovuje.
Máme pole, které vypadá takto:
Array ( [0] => a [1] => d [2] => cc [3] => c [4] => b [5] => aa [6] => ab )
Pokud jej chceme seřadit sestupně nebo vzestupně, můžeme použít funkci sort pro vzestupné řazení, nebo RSort pro sestupné řazení. Po aplikování nám vznikne pole:
Array ( [0] => d [1] => cc [2] => c [3] => b [4] => ab [5] => aa [6] => a )
Potřeboval jsem ovšem seřadit pole navíc ještě pole délky řetězce. To znamená tak, aby byly na prvních místech nejkratší řetězce.
Tento problém nám řeší funkce USort (Sort an array by values using a user-defined comparison function), u které si můžeme definovat vlastní funkci pro řazení. Vytvoříme si tedy funkci:
1 2 3 4 5 6 7 8 9 |
function usort_array($a, $b) { if ($a === $b) return 0; if( strlen( $a ) === strlen( $b ) ) return ($a < $b) ? -1 : 1; else return ( strlen( $a ) < strlen( $b ) ? -1 : 1 ); } |
a použijeme ji:
1 2 3 |
$a = array('a', 'd', 'cc', 'c', 'b', 'aa', 'ab'); usort($a, "usort_array"); print_r( $a ); |
Na výstupu bude pole seřazené přesně tak, jak potřebujeme:
Array ( [0] => a [1] => b [2] => c [3] => d [4] => aa [5] => ab [6] => cc )