Home » Php » array unique – php array_unique sorting behavior

array unique – php array_unique sorting behavior

Posted by: admin July 12, 2020 Leave a comment

Questions:

I am checking the array_unique function. The manual says that it will also sort the values. But I cannot see that it is sorting the values. Please see my sample code.

$input = array("a" => "green", 3=>"red", "b" => "green", 1=>"blue", "red");
print_r($input);
$result = array_unique($input,SORT_STRING);
print_r($result);

The output is

Array
(
    [a] => green
    [3] => red
    [b] => green
    [1] => blue
    [4] => red
)
Array
(
    [a] => green
    [3] => red
    [1] => blue
)

Here the array $result is not sorted. Any help is appreciated.

Thank you
Pramod

How to&Answers:

array_unique:

Takes an input array and returns a new array without duplicate values.

Note that keys are preserved. array_unique() sorts the values treated as string at first, then will keep the first key encountered for every value, and ignore all following keys.

you can try this to get the result:

<?php 
$input = array("a" => "green", 3=>"red", "b" => "green", 1=>"blue", "red");
print_r($input);
$result = array_unique($input);
print_r($result);
asort($result);
print_r($result);

Answer:

The manual does not say it will sort the array elements, it says that the sort_flags parameters modifies the sorting behavior.

The optional second parameter sort_flags may be used to modify the
sorting behavior using these values: […]

The sorting behavior is used to sort the array values in order to perform the comparison and determine whether one element is considered to be equal to another. It does not modify the order of the underlying array.

If you want to sort your array, you’ll have to do that as a separate operation. Documentation on array sorting can be found here.

For a default ascending sort based on the array’s values, you could use asort.

Answer:

array_unique takes an input array and returns a new array without duplicate values. It doesn’t sort actually. Read more at http://php.net/manual/en/function.array-unique.php