2016-07-19 8 views
-1

Ich habe zwei Arrays, wobei die erste:Prüfen, ob Array enthält Werte eines anderen Array in der gleichen Reihenfolge

[4, 6, 2, 7, 5, 1] 

und das zweite Wesen:

[2, 7, 5] 

Wie kann ich, wenn die erste Bestimmung Array enthält die SAME Werte (und in SAME Bestellung) des zweiten Arrays. In diesem Fall würde die Funktion TRUE zurückgeben, da die Sequenz 2, 7, 5 tatsächlich im ersten Array vorhanden ist. Es würde FALSE für 2, 5, 7 zurückgeben. Die Werte existieren im ersten Array, aber nicht in dieser exakten Reihenfolge.

Gibt es dafür eine PHP-Funktion? Wenn nein, wie soll ich das erreichen?

Antwort

1

Für gemeinsamen Fall von Array-Inhalt:

$ar1 = [2, 4, 6, 2, 4, 7, 5, 1,]; 
$ar2 = [2, 7, 5]; 

// Find point where sub-array can start 
$keys = array_keys($ar1, $ar2[0]); 
foreach($keys as $k) 
    // Check that sub-array is the same as the second array 
    if(array_slice($ar1, $k, count($ar2)) == $ar2) 
     { echo "Wow!"; break; } 
+0

Danke für deine Hilfe, es funktioniert! –

+0

Gern geschehen – splash58

1

Wenn Sie Array nur Zahlen sind, würde ich einen Trick vorschlagen:

$a1 = [4, 6, 2, 7, 5, 1]; 
$a2 = [2, 7, 5]; 
// convert both arrays to strings, 
// add `,` in the beginning and end, see @splash58 comment 
$a1_str = ',' . implode(',', $a1) . ','; 
$a2_str = ',' . implode(',', $a2) . ','; 
// check with strpos: 
echo strpos($a1_str, $a2_str) !== false? 'Eq' : 'Not eq'; 
+0

Ich kann verstehen, dass dies funktioniert, ist aber nicht ein besserer Weg, dies zu erreichen? Das Konvertieren der Arrays in Strings sieht nicht ganz richtig aus ... –

+1

@u_mulder Beide Strings mit Kommas umschließen, um den Vergleich von 2,7,5 mit 22,7,55 zu vermeiden. +1 weil ich genauso dachte – splash58

Verwandte Themen