Wie kann ich zwei Arrays gleichzeitig durchlaufen? [duplicate]

Lesezeit: 4 Minuten

Wie kann ich zwei Arrays gleichzeitig durchlaufen duplicate
Ausbeuten

Ich versuche, zwei Arrays zusammen anzuordnen, und die Ergebnisse werden immer wieder falsch angezeigt. Ich zeige Ihnen meinen Code, die Ergebnisse, die ich erhalte, und die Ergebnisse, nach denen ich suche.

Ich glaube, ich mache es einfach falsch, weiß aber nicht, wie ich es sonst machen soll.

Mein Code:

$data1 = [
    'a: 1',
    'a: 2',
    'a: 3',
    'a: 4',
    'a: 5'
];

$data2 = [
    'b: 1',
    'b: 2',
    'b: 3',
    'b: 4',
    'b: 5'
];


foreach($data1 as $item1)
{
    foreach($data2 as $item2)
    {
        echo $item1 . '<br/>';
        echo $item2 . '<br/>';
        echo '<br/><br/>';
    }
}

Die Ergebnisse: (platzsparend gekürzt)

a: 1
b: 1

a: 1
b: 2

a: 1
b: 3

a: 1
b: 4

a: 1
b: 5

Die Ergebnisse, die ich suche, sind die folgenden:

a: 1
b: 1

a: 2
b: 2

a: 3
b: 3

a: 4
b: 4

a: 5
b: 5

Wie kann ich zwei Arrays gleichzeitig durchlaufen duplicate
Rizier123

Problem

Nun, das Problem ist natürlich Ihre verschachtelte Foreach-Schleife. Denn für jedes Element Ihrer $data1 Array durchschleifen Sie das gesamte $data2 Array (Also insgesamt gibt es $data1 * $data2 Iterationen).

Lösungen

Um dies zu lösen, müssen Sie beide Arrays gleichzeitig durchlaufen.

array_map() Methode (PHP >=5.3)

Sie können dies mit tun array_map() und übergeben Sie ihm alle Arrays, die Sie gleichzeitig durchlaufen möchten.

array_map(function($v1, $v2){
    echo $v1 . "<br>";
    echo $v2 . "<br><br>";
}, $data1, $data2 /* , Add more arrays if needed manually */);

Notiz: Wenn die Anzahl der Elemente ungleichmäßig ist, werden keine Fehler generiert, es wird nur gedruckt NULL (bedeutet, dass Sie nichts sehen werden)

MultipleIterator Methode (PHP >=5.3)

Benutze einen MultipleIterator und anfügen so viele ArrayIterator wie du es brauchst.

$it = new MultipleIterator();
$it->attachIterator(new ArrayIterator($data1));
$it->attachIterator(new ArrayIterator($data2));
//Add more arrays if needed 

foreach($it as $a) {
    echo $a[0] . "<br>";
    echo $a[1] . "<br><br>";
}

Notiz: Wenn die Anzahl der Elemente ungerade ist, werden nur alle Werte gedruckt, bei denen beide Arrays noch Werte haben

for loop Methode (PHP >=4.3)

Verwenden Sie eine for-Schleife mit einer Zählervariablen, die Sie als Schlüssel für beide Arrays verwenden können.

$keysOne = array_keys($data1);
$keysTwo = array_keys($data2);

$min = min(count($data1), count($data2));

for($i = 0; $i < $min; $i++) {
    echo $data1[$keysOne[$i]] . "<br>";
    echo $data2[$keysTwo[$i]] . "<br><br>";
}

Notiz: Verwenden array_keys() ist nur so, dass das auch funktioniert, wenn die Arrays nicht die gleichen Schlüssel haben oder assoziativ sind. min() wird verwendet, um nur so viele Elemente zu durchlaufen, wie jedes Array hat

array_combine() Methode (PHP >=5.0)

Oder wenn die Arrays nur eindeutige Werte haben, können Sie das tun array_combine() beide Arrays, so dass $data1 kann als Schlüssel und abgerufen werden $data2 als Wert.

foreach(array_combine($data1, $data2) as $d1 => $d2) {
    echo $d1 . "<br>";
    echo $d2 . "<br><br>";
}

Notiz: Andernfalls müssen die Arrays die gleiche Anzahl von Elementen haben array_combine() wird einen Fehler werfen

call_user_func_array() Methode (PHP >=5.6)

Wenn Sie mehr als 2 Arrays gleichzeitig drucken möchten oder nur eine unbekannte Anzahl von Arrays, können Sie die kombinieren array_map() Methode mit a call_user_func_array() Anruf.

$func = function(...$numbers){
    foreach($numbers as $v)
        echo $v . "<br>";
    echo "<br>";
};
call_user_func_array("array_map", [$func, $data1, $data2]);

Notiz: Da dies irgendwie die verwendet array_map() Methode verhält es sich bei einer ungleichmäßigen Anzahl von Elementen gleich. Da diese Methode auch nur für PHP >=5.6 funktioniert, können Sie einfach die Argumente entfernen und ändern $numbers mit func_get_args() in der foreach-Schleife und dann funktioniert es auch für PHP >=5.3

  • Ich habe dieses seltsame Problem, anstatt die Werte wiederzugeben, die ich verwende, array_push($somevar, [‘item1’ => $item1, ‘item2’ => $item2]); aber die Registrierung von $somevar als Array innerhalb der Funktion array_map() wird aufgehoben. und ich hatte es als Array außerhalb der Iterationsfunktion gesetzt.

    – Ausbeuten

    18. August 2015 um 8:12 Uhr

  • @SarmenB. Bitte posten Sie einen kleinen Link zu einer Online-IDE oder so mit Ihrem aktuellen Code.

    – Rizier123

    18. August 2015 um 8:55 Uhr

  • Es ist in Ordnung, ich habe es mit MultipleIterator zum Laufen gebracht. Aber hier ist der Code trotzdem pastie.org/private/ppeu5xre2khelnidsowpq

    – Ausbeuten

    18. August 2015 um 9:03 Uhr

  • ich meinte array_push nicht array_merge (wenn Sie das Snippet sehen)

    – Ausbeuten

    18. August 2015 um 9:06 Uhr

  • nett, danke! Ich fange jetzt an, das Thema Arrays zu mögen, es war ein Thema, das ich vermeiden würde, als ich ein Noob war.

    – Ausbeuten

    18. August 2015 um 9:16 Uhr

Verwenden Sie den Schlüssel von 1, um Zeile in 2 zu erhalten

foreach($data1 as $k=> $item1)
{
        echo $item1 . '<br/>';
        echo $data2[$k] . '<br/>';
        echo '<br/><br/>';
}

964700cookie-checkWie kann ich zwei Arrays gleichzeitig durchlaufen? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy