簡體   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