Ich möchte eine selectbox
mit zwei Arrays generieren, eines mit den Ländercodes und eines mit den Ländernamen.
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?
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 zum Schlüssel Ihres $names
-Arrays zu machen ...
$names = array(
'tn' => 'Tunisia',
'us' => 'United States',
...
);
foreach
kann jeweils nur für ein Array verwendet werden.
So wie Ihr Array strukturiert ist, können Sie array_combine()
in ein Array von Schlüssel-Wert-Paaren und dann foreach
dieses einzelne Array einfügen:
foreach (array_combine($codes, $names) as $code => $name) {
echo '<option value="' . $code . '">' . $name . '</option>';
}
Oder wie in den anderen Antworten gezeigt, können Sie stattdessen ein assoziatives Array hartcodieren.
Verwenden Sie array_combine()
, um die Arrays miteinander zu verschmelzen und das Ergebnis zu iterieren.
$countries = array_combine($codes, $names);
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 der vernünftigste Ansatz ist, im Gegensatz zur Verwendung von array_combine()
, denn wenn Sie einmal ein assoziatives Array haben, können Sie einfach array_keys()
oder array_values()
verwenden, um genau das gleiche Array zu erhalten, das Sie zuvor hatten.
Warum nicht einfach konsolidieren mehrdimensional Assoziatives Array? Sieht so aus, als würden Sie falsch damit umgehen:
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
wird:
$dropdown = array('tn' => 'Tunisia', 'us' => 'United States', 'fr' => 'France');
Dadurch wird ein Dropdown-Menü aus einem Array erstellt und automatisch der entsprechende Wert zugewiesen.
<?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>';
?>
Sie können array_merge verwenden, um zwei Arrays zu kombinieren und diese dann zu durchlaufen.
$array1 = array("foo" => "bar");
$array2 = array("hello" => "world");
$both_arrays = array_merge((array)$array1, (array)$array2);
print_r($both_arrays);
Versuchen Sie dies anstelle von foreach loop (nur, wenn Ihre Arrays dieselbe Länge haben).
$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>';
?>
Walk it out ...
$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>";
Das hat für mich 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>";
}
Ich denke, dass Sie so etwas tun können:
$ codes = array ('tn', 'us', 'fr');
$ names = Array ('Tunesien', 'Vereinigte Staaten', 'Frankreich');
foreach ($codes as $key => $code) {
echo '<option value="' . $code . '">' . $names[$key] . '</option>';
}
Es sollte auch für assoziative Arrays funktionieren.
foreach funktioniert nur mit einem einzelnen Array. Um mehrere Arrays schrittweise zu durchlaufen, ist es besser, die each () - Funktion in einer while-Schleife zu verwenden:
while(($code = each($codes)) && ($name = each($names))) {
echo '<option value="' . $code['value'] . '">' . $name['value'] . '</option>';
}
each () gibt Informationen über den aktuellen Schlüssel und den aktuellen Wert des Arrays zurück und inkrementiert den internen Zeiger um eins oder false, wenn er das Ende des Arrays erreicht hat. Dieser Code würde nicht davon abhängig sein, dass die beiden Arrays identische Schlüssel oder die gleiche Art von Elementen aufweisen. Die Schleife wird beendet, wenn eines der beiden Arrays abgeschlossen ist.
Ich denke, der einfachste Weg ist, die for-Schleife auf diese Weise zu verwenden:
$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>';
}
Ich habe ein Problem wie Ihres auf diese Weise gelöst:
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 />";
}
Einige Arrays können auch folgendermaßen iteriert werden:
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()
hat für mich sehr gut funktioniert, indem $_POST
mehrere Werte aus mehreren Formulareingaben kombiniert wurde, um die Produktmengen in einem Einkaufswagen zu aktualisieren.
Ihr Code wie dieser ist falsch, da foreach nur für ein einzelnes Feld 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>';
}
?>
Alternative, ändern Sie dies:
<?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){
Jetzt können Sie $ a für jedes Array verwenden ....
$doors[$a]
$windows[$a]
....
}
Sie sollten dies für das put 2-Array in der foreach-Schleife .__ versuchen. Angenommen, ich habe 2 Array 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 scheint auch dafür 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, erhält der Rückruf null
Werte, um die Lücke zu füllen.
Sie können mehr als 2 Arrays zum Durchlaufen verwenden.