PHP:更好的方法来过滤重复


PHP: Better way to filter out duplicates?

我有一个像这样的数组

$images = array
(
    array('src' => 'a.jpg'),
    array('src' => 'b.jpg'),
    array('src' => 'c.jpg'),
    array('src' => 'd.jpg'),
    array('src' => 'b.jpg'),
    array('src' => 'c.jpg'),
    array('src' => 'b.jpg'),
);

也有高度和宽度,但在这里不重要。我想要的是删除重复的。我所做的感觉相当笨拙。

$filtered = array();
foreach($images as $image)
{
    $filtered[$image['src']] = $image;
}
$images = array_values($filtered);

有更好的方法吗?任何建议吗?

这可能是array_reduce

的一个很好的用例
$images = array_values(array_reduce($images, function($acc, $curr){
    $acc[$curr['src']] = $curr;
    return $acc;
}, array()));

使用array_unique.

$images = array_unique($images);

如何构建数组?可能阻止它被添加使用…

if(!in_array($needle, $haystackarray)){
    AddToArray;
}

只是一个想法。

有时我用

$filtered = array_flip(array_flip($images))

你必须理解array_flip的行为,否则你可能会得到意想不到的结果。以下是需要注意的事项:

  1. 这将删除重复的值
  2. 删除NULL值
  3. 它保留键,但是,它保留最后一个重复值(不是第一个)
  4. 需要编写一个函数来处理多维数组

使用PHP的array_unique() .

代码:

$filtered = array_unique($images);