Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Remove duplicates from an array, then remove nulls, then restructure

Tags:

arrays

php

I have an array (sizeofarray = 5)

$city[0] = 'Newyork'
$city[1] = 'Paris'
$city[2] = 'Paris'
$city[3] = 'Newyork'
$city[4] = 'Amsterdam'
(sizeofarray = 5)

I used array_unique() to remove dupes and got this:

$city[0] = 'Newyork'
$city[1] = 'Paris'
$city[4] = 'Amsterdam'
(sizeofarray = 3)

But now I want this:

$city[0] = 'Newyork'
$city[1] = 'Paris'
$city[2] = 'Amsterdam'
(sizeofarray = 3)

Is there some function to achieve this?

like image 282
JMDee Avatar asked Oct 25 '12 12:10

JMDee


2 Answers

Use array_filter after you run the array through array_unique:

$city = array_filter($city);

From the documentation:

If no callback is supplied, all entries of input equal to FALSE (see converting to boolean) will be removed.

You may run into an error, however, if one of your array elements is equal to "0", as when converted to boolean, its value is false. In that case, you'll have to use a custom callback function.


In your question, it appears that only the array indexing is out of order, and there are not actual empty string elements in your array. Try running the array though array_values after array_unique to reset the indexing:

$city = array_unique($city); 
$city = array_values($city); 
like image 83
Tim Cooper Avatar answered Nov 15 '22 00:11

Tim Cooper


In addition to Tim Cooper's reply, use array_values() to reindex the array:

$city = array_unique($city);
$city = array_filter($city);
$city = array_values($city);

And make sure same cities have same names, because 'New York' != 'Newyork'. Otherwise you'll need additional filtering.

like image 26
Minras Avatar answered Nov 15 '22 00:11

Minras