[PHP] Geen duplicaten in array

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • DeepFreeze.NL
  • Registratie: April 2006
  • Laatst online: 02-03 08:01
Het is waarschijnlijk super eenvoudig, maar ik kom er niet uit.
Ik heb een array met daarin verschillende personen. In deze array mogen geen duplicaten voorkomen.
Dit wil ik filteren met behulp van array_unique().

Echter, wanneer ik deze functie gebruik, wordt alleen de eerste persoon in de array getoond.
Alle overige worden gezien als duplicaten en verwijderd. Op zich logisch, want elke item in een array heeft "naam", "adres", "postcode", "woonplaats", "nummer".

Hoe kan ik er voor zorgen dat bij het onderstaande voorbeeld alleen de eerste 2 resultaten worden getoond en de 3e als duplicaat wordt gezien?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Array
(
    [0] => Array
        (
            [naam] => Naam 1
            [adres] => Adres 1
            [postcode] => Postcode 1
            [woonplaats] => Woonplaats 1
            [nummer] => 1
        )

    [1] => Array
        (
            [naam] => Naam 2
            [adres] => Adres 2
            [postcode] => Postcode 2
            [woonplaats] => Woonplaats 2
            [nummer] => 2
        )

    [2] => Array
        (
            [naam] => Naam 2
            [adres] => Adres 2
            [postcode] => Postcode 2
            [woonplaats] => Woonplaats 2
            [nummer] => 2
        )
)


PHP:
1
2
3
$test[] = array(naam=>$row['naam'],adres=>$row['adres'],postcode=>$row['postcode'],woonplaats=>$row['woonplaats'],nummer=>$row['nummer']);

echo '<pre>',print_r(array_unique($test)),'</pre>'; // Toont alleen het eerste item in de array.

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
http://nl3.php.net/array_unique
Note: Two elements are considered equal if and only if (string) $elem1 === (string) $elem2
Note: Note that array_unique() is not intended to work on multi dimensional arrays.
in de comments staat een alternatief.

Acties:
  • 0 Henk 'm!

  • Orion84
  • Registratie: April 2002
  • Laatst online: 02:46

Orion84

Admin General Chat / Wonen & Mobiliteit

Fotogenie(k)?

Heeft dat niet iets te maken met:
Note: Note that array_unique() is not intended to work on multi dimensional arrays.
Edit: te laat :+

[ Voor 6% gewijzigd door Orion84 op 25-06-2010 11:27 ]

The problem with common sense is that it's not all that common. | LinkedIn | Flickr


Acties:
  • 0 Henk 'm!

  • DeepFreeze.NL
  • Registratie: April 2006
  • Laatst online: 02-03 08:01
Helemaal overheen gelezen |:(

Oplossing:
PHP:
1
2
3
4
5
6
7
8
9
10
// recursive array unique for multiarrays
function super_unique($array) {
    $result = array_map("unserialize", array_unique(array_map("serialize", $array)));
    foreach ($result as $key => $value) {
        if (is_array($value)) {
            $result[$key] = super_unique($value);
        }
    }
    return $result;
}

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Hoe verkrijg je die data in de eerste plaats? Kun je dan niet in die laag al zorgen dat je dubbel eruit filtert (op query-niveau bijv)?

Acties:
  • 0 Henk 'm!

  • kwaakvaak_v2
  • Registratie: Juni 2009
  • Laatst online: 02-06 12:29
Cartman! schreef op vrijdag 25 juni 2010 @ 13:18:
Hoe verkrijg je die data in de eerste plaats? Kun je dan niet in die laag al zorgen dat je dubbel eruit filtert (op query-niveau bijv)?
Dat lijkt mij ook meer voor de hand liggen dan die relatief dure serialize/unserialize operatie. Gewoon een distinct of group by in je query. Eerst alle data ophalen en dan weer weg gooien is gewoon zonde. Nu gaat het wel goed omdat het volgens mij een relatief kleine dataset is, maar als je dit soort dingen gaat doen over sets van 1000'en records...

Driving a cadillac in a fool's parade.

Pagina: 1