107 votes

Deux tableaux dans une boucle foreach

Je veux générer un selectbox en utilisant deux tableaux, l'un contenant les codes des pays et l'autre contenant les noms des pays.

Voici un exemple :

<?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>';
    }
?>

Cette méthode n'a pas fonctionné pour moi. Avez-vous des suggestions ?

171voto

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

Ce n'est pas valable.

Vous voulez probablement quelque chose comme ça...

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

Alternativement, il serait beaucoup plus facile de faire des codes la clé de votre $names le tableau...

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

0 votes

Utile pour analyser les tableaux de champs de formulaires.

91voto

BoltClock Points 249668

foreach ne fonctionne que sur un seul tableau à la fois.

La façon dont votre tableau est structuré, vous pouvez array_combine() dans un tableau de paires clé-valeur puis foreach ce tableau unique :

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

Ou comme vu dans les autres réponses, vous pouvez coder en dur un tableau associatif à la place.

0 votes

Peut-on également l'utiliser pour trois tableaux ?

1 votes

@xjshiya Non, si vous leur donnez 3 paramètres vous obtenez Warning : array_combine() attend exactement 2 paramètres, 3 donnés

29voto

Utilisez array_combine() pour fusionner les tableaux ensemble et itérer sur le résultat.

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

6voto

Jacob Relkin Points 90729

Utilisez un tableau associatif :

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

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

Je pense que l'utilisation d'un tableau associatif est l'approche la plus judicieuse par opposition à l'utilisation de array_combine() car une fois que vous avez un tableau associatif, vous pouvez simplement utiliser array_keys() ou array_values() pour obtenir exactement le même tableau que celui que vous aviez avant.

0 votes

+1 array_combine() produit déjà un tableau associatif, vous pouvez vouloir être plus clair au sujet de initialisation de il est associatif.

3voto

Jakub Points 12663

Pourquoi ne pas simplement consolider dans un multidimensionnel tableau associatif ? On dirait que tu t'y prends mal :

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

devient :

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

2 votes

C'est ce qu'on appelle un tableau associatif, pas un tableau multidimensionnel.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X