2013-05-03 18 views
6

Mam tablicę jak tenPHP Array unikalne wartości

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 
     ) 

) 

i chcę dostać

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

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

ale po użyciu funkcji array_unique, mam tylko

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

) 

co Czy robię źle?

+5

Czy próbowałeś użyć 'tablica_unique (my_array, SORT_REGULAR)'? – diegoperini

+1

Prawdopodobny duplikat - http://stackoverflow.com/q/307674/608170. Jeśli tablica jest wynikiem zapytania, musisz ponownie sprawdzić zapytanie, aby wyeliminować duplikaty. – verisimilitude

+1

możliwy duplikat http://stackoverflow.com/questions/6766942/php-unique-array-function-for-nested-array –

Odpowiedz

17
array_unique(my_array, SORT_REGULAR) 

Zgodnie z życzeniem w komentarzach. :)

+0

Bardzo fajne rozwiązanie, zadziałało dla mnie jak urok :) –

+1

Wolałbym raczej powiedzieć - Wielka "wariacja" lol Wzniosła diegoperini w głębokiej trosce o sprawiedliwość. –

+0

Źle odczytałem sugestię Niklasa Ekmana tego dnia, a teraz zdaję sobie sprawę, że to kradzież. Przepraszam za utrudnienia. Zamiast tego przegłosowałem pytanie. – diegoperini

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

Trzeba pętli tablicę

array_unique

4

Jak wspomniano array_unique nie obsługuje wielo tablice jednowymiarowe, ale można iteracyjne nad danymi i zbudować własny

<?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

To się nie powiedzie, jeśli kolejność elementów będzie inna. 'array_unique ($ airlines, SORT_REGULAR);' jest poprawną odpowiedzią. – cleong