Anty-sort, czyli robienie bałaganu w tablicy
Niedawno w Notatkach spisałem się na temat sortowania tablic. Są jednak takie sytuacje, w których potrzebujemy troszkę namieszać w tablicy – czyli wykonać dokładnie odwrotność sortowania. Jak zwykle PHP spieszy z pomocą dostarczając nam gotowej funkcji realizującej to zadanie. Funkcja ta zwie się shuffle().
Jak zwykle na początek szybki wgląd w dokumentację, cobyśmy wiedzieli z czym mamy do czynienia:
bool shuffle (array &$array)
Użycie funkcji jest bardzo proste:
$arr = array(1, 15, 3, 10, 'foo', 'baz' => 'bar', 'sally' => 'betty', 18); shuffle($arr); print_r($arr);
array array_keys (array $input [, mixed $search_value [, bool $strict = false]])
Funkcja ta najprościej mówiąc zwraca tablicę, której elementami są klucze z przekazanej do niej tablicy $input. Jeśli podamy drugi opcjonalny argument $search_value tylko klucze odpowiadające jego wartości będą brane pod uwagę. W innym wypadku, wszystkie klucze są zwracane. Możemy podać jeszcze jeden argument, $strict, determinujący czy podczas porównywania kluczy z wartością $search_value funkcja ma stosować dokładne porównanie operatorem ===. Domyślnie klucze porównywane są za pomocą ==.
A oto jak wykorzystamy tą funkcję do naszego pierwotnego celu:
$towns = array('krosno', 'krakow', 'przemysl', 'bielsko biala', 'tarnobrzeg', 'foo' => 'wroclaw'); $keys = array_keys($towns); shuffle($keys); foreach($keys as $key) { $new_tab[$key] = $towns[$key]; } print_r($new_tab);
mixed array_rand (array $input [, int $num_req = 1])
Jak wynika z powyższej definicji, domyślnie funkcja zwraca nam jeden losowy klucz. Można to uściślić podając drugi argument $num_req.
$towns = array('krosno', 'krakow', 'przemysl', 'bielsko biala', 'tarnobrzeg', 'foo' => 'wroclaw'); $new_tab = array_rand($towns, 3); print_r($new_tab);
Array
(
[0] => 1
[1] => 2
[2] => foo
)
Sortowanie tablic Konstrukcje jezykowe