PHP:过滤掉重复的更好方法?

时间:2011-05-04 15:45:31

标签: php arrays filtering unique

我有一个像这样的数组。

$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);

有更好的方法吗?有什么建议吗?

5 个答案:

答案 0 :(得分:1)

这可能是array_reduce

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

答案 1 :(得分:0)

使用array_unique

$images = array_unique($images);

答案 2 :(得分:0)

你是如何构建阵列的?可能不会使用它来添加...

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

只是一个想法。

答案 3 :(得分:0)

有时候我会用

$filtered = array_flip(array_flip($images))

您必须了解array_flip's行为,否则您可能会收到意外结果。需要注意的一些事项是:

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

答案 4 :(得分:-1)

使用PHP的array_unique()

<强>代码:

$filtered = array_unique($images);