PHP: лучший способ отфильтровать дубликаты? - PullRequest
1 голос
/ 04 мая 2011

У меня есть массив вроде этого.

$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 ]

1 голос
/ 21 октября 2014

Это, вероятно, будет хорошим вариантом использования для array_reduce

$images = array_values(array_reduce($images, function($acc, $curr){
    $acc[$curr['src']] = $curr;
    return $acc;
}, array()));
0 голосов
/ 16 мая 2012

Иногда я использую

$filtered = array_flip(array_flip($images))

Вы должны понимать поведение array_flip , иначе вы можете получить неожиданные результаты. Некоторые вещи, на которые стоит обратить внимание:

  1. Это удалит повторяющиеся значения
  2. Удаляет значения NULL
  3. Сохраняет ключи, однако сохраняет последнее дублированное значение (не первое)
  4. Необходимо написать функцию для обработки многомерных массивов
0 голосов
/ 04 мая 2011

Как вы строите массив? Возможно, не добавляйте его, используя ...

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

Просто мысль.

0 голосов
/ 04 мая 2011

Используйте PHP array_unique().

Код:

$filtered = array_unique($images);
0 голосов
/ 04 мая 2011

Использовать array_unique .

$images = array_unique($images);
...