0

我试图防止在最终数组中出现重复。我正在尝试检查$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最后三个元素中看到的那样,id, 出现了 3 次343050519221992426_18478933。关于发生了什么的任何想法?

4

4 回答 4

4

尝试:

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

随着$final_array[]您在数组末尾添加新元素。

于 2012-12-11T11:30:29.230 回答
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); 

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

于 2012-12-11T11:30:33.350 回答
2

您正在检查但$media_candidate['id']插入$media_candidate$final_array

于 2012-12-11T11:30:18.543 回答
0

尝试这样的array_unique函数

$final_array = array_unique($media_candidate);

于 2012-12-11T11:42:50.313 回答