Zwei Arrays in jeder Schleife

Lesezeit: 3 Minuten

Zwei Arrays in jeder Schleife
med

Ich möchte eine generieren selectbox Verwenden von zwei Arrays, von denen eines die Ländercodes und das andere die Ländernamen enthält.

Dies ist ein Beispiel:

<?php
    $codes = array('tn','us','fr');
    $names = array('Tunisia','United States','France');

    foreach( $codes as $code and $names as $name ) {
        echo '<option value="' . $code . '">' . $name . '</option>';
    }
?>

Diese Methode hat bei mir nicht funktioniert. Irgendwelche Vorschläge?

  • zwei Arrays eine Schleife

    – mehov

    10. Dezember 2021 um 15:53 ​​Uhr

foreach( $codes as $code and $names as $name ) { }

Das ist nicht gültig.

Sie wollen wahrscheinlich so etwas …

foreach( $codes as $index => $code ) {
   echo '<option value="' . $code . '">' . $names[$index] . '</option>';
}

Alternativ wäre es viel einfacher, die Codes zu Ihrem Schlüssel zu machen $names Reihe…

$names = array(
   'tn' => 'Tunisia',
   'us' => 'United States',
   ...
);

  • nützlich beim Analysieren von Formularfeld-Arrays.

    – Ryu_hayabusa

    17. November 2014 um 6:31 Uhr


  • Das nennt man Smart Coding

    – Chikabala

    6. Oktober 2021 um 12:59 Uhr

  • Vermeiden Sie es, Ihre Antwort mit nicht funktionierendem Code zu beginnen, nur um später zu sagen, dass es nicht funktioniert. Eine negative Aussage sollte negativ vorangestellt werden, wenn sie sich über mehrere Absätze erstreckt

    – sybog64

    16. November 2021 um 10:04 Uhr

foreach arbeitet jeweils nur auf einem Array.

Die Art und Weise, wie Ihr Array strukturiert ist, können Sie array_combine() sie dann in ein Array von Schlüssel-Wert-Paaren foreach dieses einzelne Array:

foreach (array_combine($codes, $names) as $code => $name) {
    echo '<option value="' . $code . '">' . $name . '</option>';
}

Oder wie in den anderen Antworten zu sehen ist, können Sie stattdessen ein assoziatives Array hartcodieren.

  • Kann dies auch für drei Arrays verwendet werden?

    – xjshiya

    16. Juni 2014 um 9:15 Uhr

  • @xjshiya Nein, wenn Sie ihnen 3 Parameter geben, erhalten Sie eine Warnung: array_combine() erwartet genau 2 Parameter, 3 gegeben

    – Julian

    23. September 2014 um 10:32 Uhr

Verwenden array_combine() um die Arrays miteinander zu verschmelzen und über das Ergebnis zu iterieren.

$countries = array_combine($codes, $names);

1646904245 6 Zwei Arrays in jeder Schleife
Jakob Relk

Verwenden Sie ein assoziatives Array:

$code_names = array(
                    'tn' => 'Tunisia',
                    'us' => 'United States',
                    'fr' => 'France');

foreach($code_names as $code => $name) {
   //...
}

Ich glaube, dass die Verwendung eines assoziativen Arrays im Gegensatz zur Verwendung der sinnvollste Ansatz ist array_combine() denn sobald Sie ein assoziatives Array haben, können Sie einfach verwenden array_keys() oder array_values() um genau das gleiche Array zu erhalten, das Sie zuvor hatten.

array_map scheint dafür auch gut zu sein

$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');

array_map(function ($code, $name) {
    echo '<option value="' . $code . '">' . $name . '</option>';
}, $codes, $names);

Weitere Vorteile sind:

  • Wenn ein Array kürzer als das andere ist, wird der Rückruf empfangen null Werte, um die Lücke zu füllen.

  • Sie können mehr als 2 Arrays zum Durchlaufen verwenden.

Zwei Arrays in jeder Schleife
nyedidikeke

Das hat bei mir funktioniert:

$codes = array('tn', 'us', 'fr');
$names = array('Tunisia', 'United States', 'France');
foreach($codes as $key => $value) {
    echo "Code is: " . $codes[$key] . " - " . "and Name: " . $names[$key] . "<br>";
}

1646904246 344 Zwei Arrays in jeder Schleife
Schneebasen

Ihr Code wie dieser ist falsch, da foreach nur für ein einzelnes Array gilt:

<?php
        $codes = array('tn','us','fr');
        $names = array('Tunisia','United States','France');

        foreach( $codes as $code and $names as $name ) {
            echo '<option value="' . $code . '">' . $name . '</option>';
            }
?>

Alternativ ändern Sie dazu:

<?php
        $codes = array('tn','us','fr');
        $names = array('Tunisia','United States','France');
        $count = 0;

        foreach($codes as $code) {
             echo '<option value="' . $code . '">' . $names[count] . '</option>';
             $count++;
        }

?>

  • Lief wie am Schnürchen. Danke für die Antwort 🙂

    – Utpal – Ur bester Kumpel

    13. Juli 2021 um 20:57 Uhr

987320cookie-checkZwei Arrays in jeder Schleife

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

Privacy policy