2016-10-01 4 views
0

Ich habe einige Arrays, zum BeispielHolen Sie sich alle in allen Arrays vorgestellt Tasten

$arr[0]=array(k1=>1,k2=>1,k3=>1); 
$arr[1]=array(k2=>1,k3=>1,k4=>1); 
$arr[2]=array(k3=>1,k4=>1,k5=>1); 

Also, ich brauche alle Schlüssel zu bekommen (dynamisch, kann die Anzahl der Arrays unterscheiden), in allen Arrays dargestellt. In diesem Fall ist es k3 Schlüssel. Also sollte das Ergebnis

Ich schlage vor, es könnte durch mehrere Schleifen erreicht werden, aber wahrscheinlich gibt es einen einfacheren Weg.

Antwort

4

Sie benötigen die Funktion array_intersect_key():

<?php 

$arr1 = array('k1' => 1, 'k2' => 1, 'k3' => 1); 
$arr2 = array('k2' => 1, 'k3' => 1, 'k4' => 1); 
$arr3 = array('k3' => 1, 'k4' => 1, 'k5' => 1); 

print_r(
    array_intersect_key($arr1, $arr2, $arr3) 
); 

Ausgang:

Array 
(
    [k3] => 1 
) 
+0

Ja das ist richtig, aber wie man sie dynamisch bekommt. Ich meine, dass es eine beliebige Anzahl von Arrays geben kann. Eigentlich ist es das eine multidimensionale Array. –

+0

@elDude Sie können eine beliebige Anzahl von Arrays mit 'array_intersect_key()' verwenden, genau wie ich es in meiner Frage getan habe. Wenn Sie es in einem mehrdimensionalen Array verwenden müssen, tun Sie etwas wie 'call_user_func_array (" array_intersect_key ", $ multiDimArray)). –

+0

Danke. Eigentlich ist das meine Schuld. Ich schreibe besser die Frage)) –

1

Um die gemeinsamen Elemente in drei Arrays erhalten Sie array_intersect()

verwenden können Hinweis: Diese Funktion arbeitet auf gemeinsamen Array und nicht gemeinsame Array-Werte Schlüssel

Try this:

$key1 = array_flip($arr1); 
$key2 = array_flip($arr1); 
$key3 = array_flip($arr1); 

$intersect = array_flip(array_intersect($key1, $key2, $key3)); 
+0

Dies scheint den Punkt des Problems ("alle Schlüssel in allen Arrays, präsentiert" mit dem gewünschten Ergebnis 'k3') zu verpassen. –

Verwandte Themen