2012-10-25 58 views
4

我有一个数组(sizeofarray = 5)PHP - 从数组中删除重复,然后取出空值,然后重组

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

我用array_unique()以去除愚弄并得到这样的:

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

但现在我想这样的:

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

有一些功能来实现这一目标?

编辑的问题

+2

我不知道你为什么会为2和3'array_unique'越来越空完全删除该数组中的重复的项目,所以你应该得到你的最后一个片段显示结果。请参阅:http://pastie.org/5114229 –

+0

好吧,我很抱歉..我正在运行$ city [2]显示错误的循环。重新构造我的问题 – JMDee

回答

8

使用array_filter运行通过array_unique后阵:

$city = array_filter($city); 

documentation

如果没有回调提供,输入的所有条目等于FALSE(见转换为布尔值)将被删除。

但是,如果其中一个数组元素等于"0", as when converted to boolean, its value is false,则可能会遇到错误。在这种情况下,您必须使用自定义回调函数。


在你的问题,似乎只有数组索引是乱序,并且在您的数组中没有实际的空字符串元素。尝试运行阵列虽然array_valuesarray_unique重置索引:

$city = array_unique($city); 
$city = array_values($city); 
+0

我在重新构思我的问题。我正在运行一个循环,其中$ city [2]显示为空。它显然会,因为密钥本身是缺席的。 – JMDee

+0

对不起。我编辑了这个问题。 – JMDee

0

尝试这样的:

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

除了蒂姆·库珀的回答,请array_values()重新索引数组:

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

并确保相同的城市有相同的名称,因为'New York' != 'Newyork'。否则,你需要额外的过滤。

相关问题