Frage Zwei Arrays in foreach-Schleife


Ich möchte eine generieren selectbox Verwenden Sie zwei Arrays, von denen eines die Ländercodes und ein anderes 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?


75
2017-12-18 23:41


Ursprung


Antworten:


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

Das ist nicht gültig.

Du willst 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 Array ...

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

126
2017-12-18 23:43



foreach arbeitet immer nur an einem Array.

Die Art, wie Ihr Array strukturiert ist, können Sie array_combine() sie in ein Array von Schlüssel-Wert-Paaren dann 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 fest codieren.


67
2017-12-18 23:44



Benutzen array_combine() um die Arrays zu fusionieren und über das Ergebnis zu iterieren.

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

22
2017-12-18 23:43



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 es einfach verwenden array_keys() oder array_values() um genau das gleiche Array zu erhalten, das Sie zuvor hatten.


6
2017-12-18 23:44



Warum nicht einfach in ein mehrdimensional assoziatives Array? Scheint so, als würdest du das falsch machen:

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

wird:

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

3
2017-12-18 23:45



Alles vollständig getestet

3 Möglichkeiten zum Erstellen eines dynamischen Dropdown-Menüs aus einem Array.

Dies erstellt ein Dropdown-Menü aus einem Array und weist automatisch den entsprechenden Wert zu.

Methode # 1 (Normales Array)

<?php

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

echo '<select name="countries">';

foreach($names AS $let=>$word){
    echo '<option value="'.$let.'">'.$word.'</option>';
}
echo '</select>';

?>


Methode 2 (Normales Array)

<select name="countries">

<?php

$countries = array('tn'=> "Tunisia", "us"=>'United States',"fr"=>'France');
foreach($countries as $select=>$country_name){
echo '<option value="' . $select . '">' . $country_name . '</option>';
}
?>

</select>


Methode # 3 (Assoziatives Array)

<?php

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

echo '<select name="countries">';
echo '<option value="none">Select...</option>';
foreach ($my_array as $k => $v) {
    echo '<option value="' . $k . '">' . $v . '</option>';
}
echo '</select>';
?>

3
2017-08-07 07:50



Sie können array_merge verwenden, um zwei Arrays zu kombinieren und dann über sie zu iterieren.

$array1 = array("foo" => "bar");
$array2 = array("hello" => "world");
$both_arrays = array_merge((array)$array1, (array)$array2);
print_r($both_arrays);

2
2018-05-17 15:38



Geh raus ...

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

    array_walk($codes, function ($code,$key) use ($names) { 
        echo '<option value="' . $code . '">' . $names[$key] . '</option>';
    });
    
  • Vor PHP 5.3

    array_walk($codes, function ($code,$key,$names){ 
        echo '<option value="' . $code . '">' . $names[$key] . '</option>';
    },$names);
    
  • oder kombinieren

    array_walk(array_combine($codes,$names), function ($name,$code){ 
        echo '<option value="' . $code . '">' . $name . '</option>';
    })
    
  • in auswählen

    array_walk(array_combine($codes,$names), function ($name,$code){ 
        @$opts = '<option value="' . $code . '">' . $name . '</option>';
    })
    echo "<select>$opts</select>";
    

Demo


2
2018-03-25 05:59