繁体   English   中英

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

有时我用

$filtered = array_flip(array_flip($images))

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

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

使用array_unique

$images = array_unique($images);

你是如何构建阵列的? 可能会阻止它被添加使用...

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

只是一个想法。

使用 PHP 的array_unique()

代码:

$filtered = array_unique($images);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM