2016-04-16 14 views
1

Ich habe 2 Arrays, dann möchte ich sie per E-Mail-Schlüssel filtern. Gefällt Ihnen diesesVergleichen mehrdimensionale Arrays mit array_diff

Array1

array (size=5) 
    0 => 
    array (size=3) 
     'name' => string 'Client 1' (length=8) 
     'email' => string '[email protected]' (length=17) 
    1 => 
    array (size=3) 
     'name' => string 'Client 2' (length=8) 
     'email' => string '[email protected]' (length=17) 

Array2

array (size=3) 
    0 => 
     array (size=4) 
     'name' => string 'Client 3' (length=8) 
     'email' => string '[email protected]' (length=17) 
     'role_id' => float 3 
    1 => 
     array (size=4) 
     'name' => string 'Client 6' (length=8) 
     'email' => string '[email protected]' (length=17) 
     'role_id' => float 2 
    2 => 
     array (size=4) 
     'name' => string 'Client 7' (length=8) 
     'email' => string '[email protected]' (length=17) 
     'role_id' => float 3 

möchte ich die ähnliche E-Mail Artikel auszufiltern. Wie kann wie unten zurückkehren führen:

array (size=2) 
    0 => 
     array (size=4) 
     'name' => string 'Client 6' (length=8) 
     'email' => string '[email protected]' (length=17) 
     'role_id' => float 2 
    1 => 
     array (size=4) 
     'name' => string 'Client 7' (length=8) 
     'email' => string '[email protected]' (length=17) 
     'role_id' => float 3 

Antwort

2

Sie könnten array_udiff verwenden.

Wenn Sie das erste Array filtern, indem Sie seine Elemente mit den Elementen anderer Arrays vergleichen, die an array_udiff mit dem angegebenen Rückruf übergeben werden. Wenn der Callback 0 für ein Paar zurückgibt, wird dieses Element aus dem Ergebnis entfernt.

$result = array_udiff($arr2, $arr1, function ($a, $b) { 
    return strcmp($a['email'], $b['email']); 
}); 
+0

ya, seine Arbeit, danke! –