2013-05-03 5 views
6

У меня есть массив, как этотPHP массив уникальных значений

Array 
(
    [0] => Array 
     (
      [id] => BA 
      [name] => British Airways 
     ) 

    [1] => Array 
     (
      [id] => BA 
      [name] => British Airways 
     ) 

    [2] => Array 
     (
      [id] => LA 
      [name] => Lanchile 
     ) 

    [3] => Array 
     (
      [id] => LA 
      [name] => Lanchile 
     ) 

    [4] => Array 
     (
      [id] => BA 
      [name] => British Airways 
     ) 

    [5] => Array 
     (
      [id] => BA 
      [name] => British Airways 
     ) 

) 

и я хочу, чтобы получить

Array 
(
    [0] => Array 
     (
      [id] => BA 
      [name] => British Airways 
     ) 

    [1] => Array 
     (
      [id] => LA 
      [name] => Lanchile 
     ) 
) 

но после использования array_unique функции, все у меня есть

Array 
(
    [0] => Array 
     (
      [id] => BA 
      [name] => British Airways 
     ) 

) 

, что я делаю неправильно?

+5

Вы пытались использовать 'array_unique (my_array, SORT_REGULAR)'? – diegoperini

+1

Возможный дубликат - http://stackoverflow.com/q/307674/608170. Также, если этот массив является результатом запроса, вам нужно перепроверить свой запрос, чтобы устранить дубликаты. – verisimilitude

+1

Возможный дубликат http://stackoverflow.com/questions/6766942/php-unique-array-function-for-nested-array –

ответ

17
array_unique(my_array, SORT_REGULAR) 

Как исправлено в комментариях. :)

+0

Очень приятное решение, работало для меня как шарм :) – 2013-10-29 16:01:11

+1

U скорее скажут - Великий «затишье» lol Упомянутый diegoperini в глубокой заботе о справедливости. –

+0

Я неправильно понял предложение Никласа Экмана в тот день, и теперь я понимаю, что он воровал. Извиняюсь за неудобства. Вместо этого я рассмотрел этот вопрос. – diegoperini

2
array_unique is not intended to work on multi dimensional arrays. 

Вы должны цикла массив

array_unique

4

Как уже упоминалось array_unique не поддерживает многомерные массивы, но вы могли бы перебрать данные и построить свой собственный

<?php 
$airlines = array(
    array('id' => 'BA', 'name' => 'British Airways'), 
    array('id' => 'LA', 'name' => 'Lanchile'), 
    array('id' => 'BA', 'name' => 'British Airways'), 
    array('id' => 'LA', 'name' => 'Lanchile'), 
    array('id' => 'BA', 'name' => 'British Airways'), 
    array('id' => 'LA', 'name' => 'Lanchile'), 
); 
$tmp = array(); 
foreach ($airlines as $item) { 
    if (!in_array($item['id'], $tmp)) { 
     $unique[] = $item; 
     $tmp[] = $item['id']; 
    } 
} 

var_dump($unique); // $unqiue will have your desired results in it var_dump was just for testing 
1
$airlines = array(
    array('id' => 'BA', 'name' => 'British Airways'), 
    array('id' => 'LA', 'name' => 'Lanchile'), 
    array('id' => 'BA', 'name' => 'British Airways'), 
    array('id' => 'LA', 'name' => 'Lanchile'), 
    array('id' => 'BA', 'name' => 'British Airways'), 
    array('id' => 'LA', 'name' => 'Lanchile'), 
); 


$unique = array_map(
    'unserialize', 
    array_unique(
     array_map(
      'serialize', 
      $airlines 
     ) 
    ) 
); 

var_dump($unique); 
+0

Это не сработает, если порядок элементов будет иным. 'array_unique ($ airlines, SORT_REGULAR);' правильный ответ. – cleong

Смежные вопросы