You merely want to ensure that asort
and array_unique
use the same sort_flags.
By default:
- array array_unique ( array $array [, int $sort_flags = SORT_STRING ] )
- bool asort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
So you can see that each will sort based on a different algorithm, which might mostly match up, but you want it to explicitly match up. Thus, the smart money is on making a decision like:
<?php
$input = array("a" => "green", "red", "b" => "green", "blue", "red");
asort($input,SORT_REGULAR);
print_r($input);
print "\n";
$result = array_unique($input,SORT_REGULAR);
print_r($result);
Resulting in:
Array
(
[1] => blue
[a] => green
[b] => green
[2] => red
[0] => red
)
Array
(
[1] => blue
[a] => green
[2] => red
)
Also note that if you merely run array_unique
without the initial asort
, you will get different results.
Finally note that asort
supports two flags that array_unique
does not support:
SORT_NATURAL
- compare items as strings using "natural ordering" like natsort()SORT_FLAG_CASE
- can be combined (bitwise OR) withSORT_STRING
orSORT_NATURA
L to sort strings case-insensitively
If you use either of these two in your asort
then you would necessarily need to asort
again after array_unique
.