usort Ordena um array pelos valores utilizando uma função de comparação definida pelo usuário &reftitle.description; trueusort arrayarray callablecallback Ordenar o array pelos valores usando uma função de comparação definida pelo usuário para determinar a ordem. ¬e.sort-unstable; ¬e.no-key-association; &reftitle.parameters; array The input array. callback &sort.callback.description; &reftitle.returnvalues; &return.true.always; &reftitle.changelog; &Version; &Description; &return.type.true; &array.changelog.by-ref; &reftitle.examples; Exemplo de <function>usort</function> $valor) { echo "$chave: $valor\n"; } ?> ]]> &example.outputs; O operador nave espacial (<=>) pode ser usado para simplificar ainda mais a comparação interna. $b; } $a = array(3, 2, 5, 6, 1); usort($a, "cmp"); foreach ($a as $chave => $valor) { echo "$chave: $valor\n"; } ?> ]]> Obviamente que nesse caso trivial a função sort seria mais apropriada. Exemplo de <function>usort</function> usando um array multidimensional $valor) { echo "\$frutas[$chave]: " . $valor["fruta"] . "\n"; } ?> ]]> &example.outputs; Na ordenação de um array multi-dimensional, $a e $b contêm referências ao primeiro índice do array. Exemplo de <function>usort</function> usando uma função membro de um objeto name = $name; } /* Essa é a função estática de comparação */ static function cmp_obj($a, $b) { return strtolower($a->name) <=> strtolower($b->name); } } $a[] = new TestObj("c"); $a[] = new TestObj("b"); $a[] = new TestObj("d"); usort($a, [TestObj::class, "cmp_obj"]); foreach ($a as $item) { echo $item->name . "\n"; } ?> ]]> &example.outputs; Exemplo de <function>usort</function> usando uma <link linkend="functions.anonymous">closure</link> para ordernar um array multidimensional 'z', 'key_b' => 'c'); $array[1] = array('key_a' => 'x', 'key_b' => 'b'); $array[2] = array('key_a' => 'y', 'key_b' => 'a'); function build_sorter($key) { return function ($a, $b) use ($key) { return strnatcmp($a[$key], $b[$key]); }; } usort($array, build_sorter('key_b')); foreach ($array as $item) { echo $item['key_a'] . ', ' . $item['key_b'] . "\n"; } ?> ]]> &example.outputs; Exemplo de <function>usort</function> usando o operador nave espacial O operador nave espacial permite comparação direta de valores compostos atráves de múltiplos eixos. O exemplo a seguir irá ordenar $pessoas pelo último nome, e depois pelo primeiro nome se o último nome for igual. 'Adam', 'ultimo' => 'West']; $pessoas[1] = ['primeiro' => 'Alec', 'ultimo' => 'Baldwin']; $pessoas[2] = ['primeiro' => 'Adam', 'ultimo' => 'Baldwin']; function sorter(array $a, array $b) { return [$a['ultimo'], $a['primeiro']] <=> [$b['ultimo'], $b['primeiro']]; } usort($pessoas, 'sorter'); foreach ($pessoas as $pessoa) { print $pessoa['ultimo'] . ', ' . $pessoa['primeiro'] . PHP_EOL; } ?> ]]> &example.outputs; &reftitle.seealso; uasort uksort &seealso.array.sorting;