2017-01-03 1 views
0

Wie finde ich die Werte in einem Array, das in der Reihenfolge mit einem anderen Array übereinstimmt?Wie folgt der Wert in PHP?

Hier ist mein Code, die mir den $ Array4 gibt, die auf das erwartete Ergebnis nicht entsprechen (siehe unten):

<?php 
for ($j=0; $j < 1; $j++) { 
    for ($i=0; $i < 100; $i++) { 
     $Array3 = (array_intersect($Array2, $Array1)); 
     $Array4 = array_unique($Array3); 
    } 

print_r($Array4); 
} 
?> 

$ Array1:

[not] => G 
[have] => L 

$ Array2 - Array die passen mit $ Array1:

[Once] => B 
[uppon] => A 
[a] => G 
[time] => M 
[,] => Z 
[a] => V 
[small] => G 
[squirrel] => F 
[,] => Z 
[whitch] => U 
[once] => L 
[in] => N 
[the] => N 
[forest] => X 
[,] => Z 
[set] => G  \\Search 
[out] => L  \\string 
[to] => V 
[find] => M 
[something] => N 
[to] => W 
[eat] => X 
[,] => Z 
[to] => G 
[survive] => G 
[.] => Z 

Das Ergebnis mit meinem Code:

$ Array3 - mit Dubletten:

[a] => G 
[small] => G 
[once] => L 
[set] => G  \\Search 
[out] => L  \\string 
[to] => G 

$ Array4 - Das Ergebnis (das Problem ist, dass "a" und "einmal" folgen sie nicht im Array $ Array2):

[a] => G 
[once] => L 

Das erwartete Ergebnis:

[set] => G \\Search 
[out] => L \\string 
+2

Dies ist eine sehr seltsame Situation. Und obwohl du es versucht hast, habe ich das Gefühl, dass du es nicht geschafft hast zu erklären, was du willst. Ich würde vorschlagen, dass Sie die Daten bereitstellen, die sich in 'Array1' und' Array2' befinden und dann das Ergebnis und das Ergebnis, das Sie erhalten möchten. Das könnte ich nur sein. – Mihailo

+0

@Milailo Die Gesamtheit der Daten von Array1 und Array2 sind oben angegeben. Auch das oben erhaltene Ergebnis und das gewünschte Ergebnis sind oben angegeben. – Marie

+0

Was ist der Zweck der Tasten 'not' und' have' in '$ Array1'? – CodeGodie

Antwort

0

Dies würde hoffentlich tun, was Sie suchen.

function findSameInPosition($needle, $haystack) { 
    $indexedNeedle = array_values($needle); 
    $indexedHaystack = array_values($haystack); 
    foreach (array_keys($indexedHaystack) as $key) { 
     if (array_slice($indexedHaystack, $key, count($indexedNeedle)) === $indexedNeedle) { 
      return array_slice($haystack, $key, count($indexedNeedle)); 
     } 
    } 
} 

// Example: 

$input1 = array(
    "not" => "G", 
    "have" => "L" 
); 

$input2 = array(
    "Once" => "B", 
    "uppon" => "A", 
    "a" => "G", 
    "time" => "M", 
    "," => "Z", 
    "a" => "V", 
    "small" => "G", 
    "squirrel" => "F", 
    "," => "Z", 
    "whitch" => "U", 
    "once" => "L", 
    "in" => "N", 
    "the" => "N", 
    "forest" => "X", 
    "," => "Z", 
    "set" => "G", 
    "out" => "L", 
    "to" => "V", 
    "find" => "M", 
    "something" => "N", 
    "to" => "W", 
    "eat" => "X", 
    "," => "Z", 
    "to" => "G", 
    "survive" => "G", 
    "." => "Z" 
); 

findSameInPosition($input1, $input2); // Returns Array ([set] => G [out] => L) 
+0

Vielen Dank für Ihre Antwort. Ich verstehe jedoch nicht, warum, wenn ich meine Werte im Array ändere, indem ich zum Beispiel "V" "M" anstelle von "G" "L" setze, das Ergebnis ist: [a] => V [time] => M Während es sein sollte [to] => V [finden] => M? – Marie

+0

Das liegt daran, dass ein Array nicht mehrere Werte mit demselben Schlüssel haben kann. Der letzte, der definiert wird, überschreibt den zuvor definierten. Wenn dies nicht Ihren Anforderungen entspricht, müssen Sie eine andere Datenstruktur für mehrere Schlüssel verwenden. Wenn dies der Fall ist, ermutige ich Sie, eine neue Frage mit einer ähnlichen Datenstruktur wie in der folgenden Antwort zu stellen: http://stackoverflow.com/a/2879138/4493079 –

+0

Danke :) Es ist in der Tat ein Problem aber ich kann es nicht anders machen ... Aus diesem Grund suchte ich nach einem System, das es mir erlaubt, feste Werte zwischen ihnen festzulegen. (y) – Marie