in_array没有按预期工作

时间:2012-12-11 11:28:36

标签: php

我正在尝试防止在最终数组中出现重复项。我试图检查$media_candidate对象列表中的重复项并编译它们:

$iterator = 0;

// ensure items in final array are unique
while ((count($final_array) < $numResults) && ($iterator < count($media_data))) {
    $media_candidate = $media_data[$iterator++];

    if(!in_array($media_candidate['id'], $final_array)){
         $final_array[] = $media_candidate;
    }
}

正如您在$final_array 343050519221992426_18478933中看到的那样,最后三个元素出现3次,ID为{{1}}。关于发生了什么的任何想法?

4 个答案:

答案 0 :(得分:4)

尝试:

if(!in_array($media_candidate['id'], $final_array)){
    $final_array[] = $media_candidate['id'];
}

使用$final_array[],您可以在数组末尾添加新元素。

答案 1 :(得分:4)

首先:你没有截断最后的数组,所以所有的双重数据都会在最后结束。

第二:你正在重新发明轮子:阅读array_unique()

修改

第三:编辑完成后,有一种更简单的方法:

$final_array=array(); 
foreach($media_data as $m) $final_array[$m['id']]=$m;
//You might want the next line or not
$final_array=array_values($final_array); 

实质上,您将唯一性外包给数组的哈希键。

答案 2 :(得分:2)

您正在检查$media_candidate['id'],但在$media_candidate

中插入$final_array

答案 3 :(得分:0)

尝试像这样的array_unique函数

$ final_array = array_unique($ media_candidate);