2016-10-19 1 views
3

Zum Beispiel habe ich zwei Arrays,PHP Vergleich Array-Elemente als Ganzes

$arrayA = [0=>"A", 1=>"B", 2=>"C", 3=>"C", 4=>"E", 5=>"F"]; 
$arrayB = [0=>"B", 1=>"C"]; 

Wenn ich array_intersect():

$same = array_intersect($arrayA, $arrayB); 

Ich werde das Ergebnis der $same

1 => B 
2 => C 
3 => C 

erhalten Stattdessen möchte ich nur

erreichen
1 => B 
2 => C 

UPDATE

Nach Antwort von amow und Ekin vorgesehen versucht, erkannte ich, dass es eine Beschränkung auf dieses Verfahren. Wenn mein Arrays in dem unten stehenden Formular ist,

$arrayA = [0=>"A", 1=>"B", 2=>"C", 3=>"B", 4=>"C", 5=>"E", 6=>"F"]; 
$arrayB = [0=>"B", 1=>"C", 2=>"B", 3=>"C"]; 
$same = array_unique(array_intersect($arrayA, $arrayB)); 

das Ergebnis $same wird immer noch

1 => B, 
2 => C 

, wo ich bin die Hoffnung, diese

1 => B, 
2 => C, 
3 => B, 
4 => C 

Antwort

2

array_intersect(array_unique($arrayA),array_unique($arrayB))
Hoffnung zu bekommen Hilfe.

array_unique doc

Lösung mit Update:

$arrayA = [0=>"A", 1=>"B", 2=>"C", 3=>"B", 4=>"C", 5=>"E", 6=>"F"]; 
$arrayB = ["B","C","B","C"]; 
$filter = $arrayB; 
$same = []; 
foreach ($arrayA as $key => $value) { 
    $bIndex = array_search($value, $filter); 
    if($bIndex !== false){ 
     $same[$key] = $value; 
     unset($filter[$bIndex]); 
    } 
} 
var_dump($same); 
+0

Dank! Dies löste mein Problem –

+0

Ich habe meine Frage aktualisiert, können Sie bitte einen Blick darauf werfen? –

+0

danke ... aber ich muss die Indizes von arrayA als Ergebnis, nicht Indizes von arrayB –

2

oben wahr ist, können Sie einfach die intersect innerhalb array_unique wickeln (wie auch). Wie:

$arrayA = [0=>"A", 1=>"B", 2=>"C", 3=>"C", 4=>"E", 5=>"F"]; 
$arrayB = [0=>"B", 1=>"C"]; 
$same = array_unique(array_intersect($arrayA, $arrayB)); 

print_r($same); 

# Array ([1] => B [2] => C) 
+0

thanks .. Ich habe Ihre Methode versucht, und ich erkannte, dass es sicher ist Einschränkungen. Können Sie sich bitte meine aktualisierte Frage ansehen? –

+0

In diesem Fall funktioniert die Kreuzung allein in Ordnung? @TommyLee, ich gebe noch ein paar Versuche aber siehe https: // 3v4l.org/JjR34 – Ekin

+0

Wenn ich 'array_intersect' allein benutze, habe [B, C, B, C] oder [B, C] im ArrayB das gleiche Ergebnis; Was ich erreichen will, ist, dass beide Fälle mir '[1 => B, 2 => C, 3 => B, 4 => C] «oder» [1 => B, 2 => C] «zurückliefern –

0
$arrayA = [0=>"A", 1=>"B", 2=>"C", 3=>"C", 4=>"E", 5=>"F"]; 
$arrayB = [0=>"B", 1=>"C"]; 
$result = array(); 

foreach ($arrayB as $key => $value) { 
    if($key = array_search($value, $arrayA)){ 
    $result[$key] = $arrayA[$key]; 
    } 
} 

print_r($result); 

Und Sie erhalten:

Array ([1] => B [2] => C) 
+0

nicht genau das, was ich wollte, was ich wollte, war das Ergebnis von '1 => B, 2 => C' –

+0

Aktualisiert den Code von 1 statt 0 zu starten, das ist alles, was Sie brauchten, denke ich –