Question

I am trying to learn how to use array_unique, so I made some sample code and I didn't get what I expected.

$array[0] = 1;
$array[1] = 5;
$array[2] = 2;
$array[3] = 6;
$array[4] = 3;
$array[5] = 3;
$array[6] = 7;
$uniques = array_unique($array, SORT_REGULAR);
for($i = 0; $i < count($uniques); $i++)
    echo $uniques[$i];

For example this gives me the output of '15263' but not 7. After a few test I think that it stops looking after it finds the first duplicate. Is that what is supposed to happen?

Was it helpful?

Solution

Reason for $uniques output is

 Array
(
    [0] => 1
    [1] => 5
    [2] => 2
    [3] => 6
    [4] => 3
    [6] => 7
)

Your array doesn't contain key 5, but in your for loop echo $uniques[$i]; not hold the value of echo $uniques[5];. that is the reason value 7 is missing.

Try this,

foreach($uniques as $unique){
   echo $unique;
}

instead of

 for($i = 0; $i < count($uniques); $i++)

OR, you can re-index the array using array_values($uniques) and use,

  $uniques = array_values($uniques);
  for($i = 0; $i < count($uniques); $i++)
   echo $uniques[$i];

OTHER TIPS

Since array_unique preserves the keys, you can’t access the array $uniques properly with a for loop. Either use a foreach loop or change the seventh line of your code to:

$uniques = array_values(array_unique($array, SORT_REGULAR));
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top