it-swarm.com.de

Zwei Arrays in der foreach-Schleife

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?

78
medk
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',
   ...
);
133
alex

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.

75
BoltClock

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.

6
Jacob Relkin

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');
3
Jakub

Alles vollständig getestet

3 Möglichkeiten, ein dynamisches Dropdown aus einem Array zu erstellen.

Dadurch wird ein Dropdown-Menü aus einem Array erstellt und automatisch der entsprechende Wert zugewiesen.

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

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);
2
Haider Ali

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

?>
2
r5d

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>";
    

Demo

2

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>";
}
2
delAmux

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.

1
pashri

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.

1
PerceptorII

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>';
}
1
SeReGa

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 />";
}
0
Ulugov

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.

0
Calin Rusu

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++;
        }

?>
0
Snow Bases
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]
....
}
0
Gvice

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 `
0
JADAV AKASH

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.

0
ankabout