调用array_unique后删除未定义的数组索引

时间:2013-12-27 08:35:54

标签: php

$almostallTech=array();
$almostallTech[]="no";
$almostallTech[]="no";
$almostallTech[]="yes";
$almostallTech[]="yes";
$almostallTech[]="no";
$almostallTech[]="yes";

$almostallTech=array_unique($almostallTech);
printf("size of array: %d<br/>", sizeof($almostallTech));

for ($x = 0; $x < (sizeof($almostallTech)); $x++) {
    printf("%s", $almostallTech[$x]);
}

调用unique方法后,返回大小为2 - 这是正确的。然而,for循环给出了未定义的偏移误差。

进一步检查后,如果我打印出来:

printf("%s", $almostallTech[0]); - I get no
printf("%s", $almostallTech[2]); - I get yes
printf("%s", $almostallTech[1]); - undefined offset error

因此,唯一的功能是删除重复项,但保留前一个数组的相同索引 - 这是它的工作原理。这应该很简单,但无法弄清楚如何删除空或更具体的未定义索引。尝试了array_filter但仍然无法正常工作。有什么建议吗?

我想要的是在调用array_unique方法之后,删除重复项但应该应用新索引。即: 我想$ almostallTech [0]包含“否” 我想$ almostallTech [1]包含“是”

2 个答案:

答案 0 :(得分:7)

因为array_unique()没有重新索引数组。您必须使用array_values()或其他类似函数以数字方式重新索引数组:

$almostallTech = array_values($almostallTech);

答案 1 :(得分:1)

尝试

 $almostallTech = array_values(array_flip(array_flip($almostallTech)));

使用数组中的array_flip键成为值,数组中的值成为键。因此,您可以删除重复项,但索引仍然是相同的。现在你可以使用array_values函数来返回数组的所有值。