Два массива в цикле foreach - PullRequest
       36

Два массива в цикле foreach

86 голосов
/ 19 декабря 2010

Я хочу сгенерировать selectbox, используя два массива, один из которых содержит коды стран, а другой - названия стран.

Это пример:

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

Этот метод не работал для меня. Есть предложения?

Ответы [ 21 ]

2 голосов
/ 07 сентября 2015
<?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>';

?>
1 голос
/ 06 января 2017

foreach работает только с одним массивом.Для обхода нескольких массивов, лучше использовать функцию each () в цикле while:

while(($code = each($codes)) && ($name = each($names))) {
    echo '<option value="' . $code['value'] . '">' . $name['value'] . '</option>';
}

each () возвращает информацию о текущем ключе и значении массива и увеличивает внутренний указатель на единицуили возвращает false, если он достиг конца массива.Этот код не будет зависеть от двух массивов, имеющих одинаковые ключи или одинаковые элементы.Цикл завершается, когда один из двух массивов завершен.

1 голос
/ 16 июля 2016

Я думаю, что самый простой способ - это просто использовать цикл for следующим образом:

$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 голос
/ 07 июля 2016

Я думаю, что вы можете сделать что-то вроде:

$ codes = array ('tn', 'us', 'fr');

$ names = array ('Тунис', 'Соединенные Штаты', 'Франция');

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

Это также должно работать для ассоциативных массивов.

0 голосов
/ 21 мая 2018

Ваш код, как этот, является неправильным, поскольку foreach только для одного массива:

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

Альтернатива, Замените на это:

<?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 голосов
/ 20 октября 2015

Несколько массивов также можно итерировать следующим образом:

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,
    );
  }
0 голосов
/ 02 марта 2015

Вы должны попробовать это для помещения массива 2 в цикл singlr foreach. Предположим, у меня есть 2 массива 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 голосов
/ 21 декабря 2012

array_combine() отлично работал для меня, сочетая $_POST несколько значений из нескольких входов в форму в попытке обновить количество товаров в корзине.

0 голосов
/ 17 июля 2013

у меня работает

$counter = 0;
foreach($codes as $code)
{
$codes_array[$counter]=$code;
$counter++;
}
$counter = 0;
foreach($names as $name)
{
echo $codes_array[$counter]."and".$name;
$counter++;
}
0 голосов
/ 19 февраля 2013

Я решил проблему, подобную вашей, следующим образом:

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 />";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...