$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]包含“是”
答案 0 :(得分:7)
因为array_unique()
没有重新索引数组。您必须使用array_values()
或其他类似函数以数字方式重新索引数组:
$almostallTech = array_values($almostallTech);
答案 1 :(得分:1)
尝试
$almostallTech = array_values(array_flip(array_flip($almostallTech)));
使用数组中的array_flip键成为值,数组中的值成为键。因此,您可以删除重复项,但索引仍然是相同的。现在你可以使用array_values函数来返回数组的所有值。