【问题标题】:PHP: Better way to filter out duplicates?PHP:过滤重复项的更好方法?
【发布时间】:2011-05-04 15:45:30
【问题描述】:

我有一个类似这样的数组。

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

有没有更好的方法来做到这一点?有什么建议吗?

【问题讨论】:

  • 想不出一个,我唯一可能做的就是把你的中心线改成if(isset($filtered[$image['src']])) $filtered[$image['src']] = $image;
  • 这似乎是一个在线性时间内运行的好解决方案。

标签: php arrays filtering unique


【解决方案1】:

这可能是array_reduce 的一个很好的用例

$images = array_values(array_reduce($images, function($acc, $curr){
    $acc[$curr['src']] = $curr;
    return $acc;
}, array()));

【讨论】:

    【解决方案2】:

    使用array_unique

    $images = array_unique($images);
    

    【讨论】:

    • 这对数组有用吗?它会检查所有的数组键和值吗?
    • 注意:这将在这个特定的实例中起作用,因为数组键是相同的 (src)。但是,如果数组键不同但包含与array_unique 相同的值,则这不是解决方案@ 仅比较值。 RTFM。
    • -1 阅读array_unique 的注释:“当且仅当(string) $elem1 === (string) $elem2 时,才认为两个元素相等。换句话说:当字符串表示相同时。”
    【解决方案3】:

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

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

    只是一个想法。

    【讨论】:

    • 我只是喜欢使用它,因为至少对我而言,它对正在发生的事情非常具有自我描述性,并且从我所看到的内容来看,您应该可以在一行代码中解决您的问题。跨度>
    【解决方案4】:

    有时我会使用

    $filtered = array_flip(array_flip($images))
    

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

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

    【讨论】:

      【解决方案5】:

      使用 PHP 的array_unique()

      代码:

      $filtered = array_unique($images);
      

      【讨论】:

      • -1 阅读array_unique 的注释:“当且仅当(string) $elem1 === (string) $elem2 时,才认为两个元素相等。换句话说:当字符串表示相同时。”
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-30
      • 2021-09-27
      • 2019-10-28
      • 2012-01-27
      • 2021-05-01
      • 1970-01-01
      • 2014-09-23
      相关资源
      最近更新 更多