Je veux générer une selectbox
en utilisant deux tableaux, l'un contenant les codes de pays et l'autre contenant les noms de pays.
Ceci est 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. Aucune suggestion?
foreach( $codes as $code and $names as $name ) { }
Ce n'est pas valide.
Vous voulez probablement quelque chose comme ça ...
foreach( $codes as $index => $code ) {
echo '<option value="' . $code . '">' . $names[$index] . '</option>';
}
Sinon, il serait beaucoup plus facile de faire des codes la clé de votre tableau $names
...
$names = array(
'tn' => 'Tunisia',
'us' => 'United States',
...
);
foreach
opère sur un seul tableau à la fois.
De la manière dont votre tableau est structuré, vous pouvez array_combine()
les transformer en 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 indiqué dans les autres réponses, vous pouvez plutôt coder en dur un tableau associatif.
Utilisez array_combine()
pour fusionner les tableaux et effectuer une itération sur le résultat.
$countries = array_combine($codes, $names);
Utilisez un tableau associatif:
$code_names = array(
'tn' => 'Tunisia',
'us' => 'United States',
'fr' => 'France');
foreach($code_names as $code => $name) {
//...
}
Je crois 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 précédemment.
Pourquoi ne pas simplement consolider dans un multidimensionnel tableau associatif? On dirait que vous vous trompez:
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
devient:
$dropdown = array('tn' => 'Tunisia', 'us' => 'United States', 'fr' => 'France');
Cela créera un menu déroulant à partir d'un tableau et assignera automatiquement sa valeur respective.
<?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>';
?>
<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>
<?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>';
?>
Vous pouvez utiliser array_merge pour combiner deux tableaux, puis les parcourir.
$array1 = array("foo" => "bar");
$array2 = array("hello" => "world");
$both_arrays = array_merge((array)$array1, (array)$array2);
print_r($both_arrays);
Essayez ceci au lieu d’une boucle foreach (uniquement lorsque vos tableaux ont la même longueur).
$number = COUNT($_POST["codes "]);//count how many arrays available
if($number > 0)
{
for($i=0; $i<$number; $i++)//loop thru each arrays
{
$codes =$_POST['codes'][$i];
$names =$_POST['names'][$i];
//ur code in here
}
}
<?php
$codes = array ('tn','us','fr');
$names = array ('Tunisia','United States','France');
echo '<table>';
foreach(array_keys($codes) as $i) {
echo '<tr><td>';
echo ($i + 1);
echo '</td><td>';
echo $codes[$i];
echo '</td><td>';
echo $names[$i];
echo '</td></tr>';
}
echo '</table>';
?>
Promène-le ...
$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>';
});
Avant PHP 5.3
array_walk($codes, function ($code,$key,$names){
echo '<option value="' . $code . '">' . $names[$key] . '</option>';
},$names);
ou combiner
array_walk(array_combine($codes,$names), function ($name,$code){
echo '<option value="' . $code . '">' . $name . '</option>';
})
dans select
array_walk(array_combine($codes,$names), function ($name,$code){
@$opts = '<option value="' . $code . '">' . $name . '</option>';
})
echo "<select>$opts</select>";
Cela a fonctionné pour moi:
$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>";
}
Je pense que vous pouvez faire quelque chose comme:
$ codes = array ('tn', 'us', 'fr');
$ names = array ('Tunisia', 'United States', 'France');
foreach ($codes as $key => $code) {
echo '<option value="' . $code . '">' . $names[$key] . '</option>';
}
Cela devrait également fonctionner pour les tableaux associatifs.
foreach ne fonctionne qu'avec un seul tableau. Pour parcourir plusieurs tableaux, il est préférable d'utiliser la fonction each () dans une boucle while:
while(($code = each($codes)) && ($name = each($names))) {
echo '<option value="' . $code['value'] . '">' . $name['value'] . '</option>';
}
each () renvoie des informations sur la clé et la valeur actuelles du tableau et incrémente le pointeur interne d'un point ou renvoie false s'il a atteint la fin du tableau. Ce code ne dépendrait pas du fait que les deux tableaux ont des clés identiques ou ont le même type d’éléments. La boucle se termine lorsque l'un des deux tableaux est terminé.
Je pense que le moyen le plus simple est d’utiliser la boucle for de cette façon:
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
for($i = 0; $i < sizeof($codes); $i++){
echo '<option value="' . $codes[$i] . '">' . $names[$i] . '</option>';
}
J'ai résolu un problème comme le vôtre de cette manière:
foreach(array_keys($idarr) as $i) {
echo "Student ID: ".$idarr[$i]."<br />";
echo "Present: ".$presentarr[$i]."<br />";
echo "Reason: ".$reasonarr[$i]."<br />";
echo "Mark: ".$markarr[$i]."<br />";
}
Peu de tableaux peuvent aussi être itérés comme ceci:
foreach($array1 as $key=>$val){ // Loop though one array
$val2 = $array2[$key]; // Get the values from the other arrays
$val3 = $array3[$key];
$result[] = array( //Save result in third array
'id' => $val,
'quant' => $val2,
'name' => $val3,
);
}
array_combine()
a fonctionné très bien pour moi tout en combinant $_POST
plusieurs valeurs provenant de plusieurs entrées de formulaire afin de mettre à jour les quantités de produits dans un panier.
Votre code comme celui-ci est incorrect, car foreach uniquement pour un tableau unique:
<?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>';
}
?>
Alternative, changer à ceci:
<?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++;
}
?>
if(isset($_POST['doors'])=== true){
$doors = $_POST['doors'];
}else{$doors = 0;}
if(isset($_POST['windows'])=== true){
$windows = $_POST['windows'];
}else{$windows = 0;}
foreach($doors as $a => $b){
Maintenant vous pouvez utiliser $ a pour chaque tableau ....
$doors[$a]
$windows[$a]
....
}
Vous devriez essayer ceci pour le tableau 2 en boucle unique pour chaque boucle Supposons que j'ai 2 tableaux 1. $ item_nm 2. $ item_qty
`<?php $i=1; ?>
<table><tr><td>Sr.No</td> <td>item_nm</td> <td>item_qty</td> </tr>
@foreach (array_combine($item_nm, $item_qty) as $item_nm => $item_qty)
<tr>
<td> $i++ </td>
<td> $item_nm </td>
<td> $item_qty </td>
</tr></table>
@endforeach `
array_map semble bon pour cela aussi
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
array_map(function ($code, $name) {
echo '<option value="' . $code . '">' . $name . '</option>';
}, $codes, $names);
Les autres avantages sont:
Si un tableau est plus court que l'autre, le rappel reçoit null
valeurs pour combler le vide.
Vous pouvez utiliser plus de 2 tableaux pour effectuer une itération.