web-dev-qa-db-ja.com

foreachループの2つの配列

2つの配列を使用してselectboxを生成します。1つは国コードを含み、もう1つは国名を含みます。

これは一例です:

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

この方法はうまくいきませんでした。助言がありますか?

89
medk
foreach( $codes as $code and $names as $name ) { }

それは無効です。

おそらくこのようなものが必要です...

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

または、コードを$names配列のキーにする方がはるかに簡単です...

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

foreachは、一度に1つの配列のみで動作します。

配列の構造は、array_combine()キーと値のペアの配列にforeachできます。

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

または、他の回答に見られるように、代わりに連想配列をハードコーディングできます。

80
BoltClock

array_combine() を使用して、配列を融合し、結果を反復処理します。

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

連想配列を使用します。

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

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

連想配列を使用すると、array_combine()を使用するのではなく、最も賢明なアプローチであると思います。なぜなら、連想配列を作成したら、array_keys()またはarray_values()を使用して、以前とまったく同じ配列を取得できるからです。

6
Jacob Relkin

なぜ統合するだけではありませんか 多次元 連想配列?あなたはこれについて間違っているようです:

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

になる:

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

Array_mergeを使用して2つの配列を結合し、それらを反復処理できます。

$array1 = array("foo" => "bar");
$array2 = array("hello" => "world");
$both_arrays = array_merge((array)$array1, (array)$array2);
print_r($both_arrays);
2
Haider Ali

Foreachループの代わりに、これを試してください(配列の長さが同じ場合のみ)。

$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

すべて完全にテスト済み

配列から動的ドロップダウンを作成する3つの方法。

これにより、配列からドロップダウンメニューが作成され、それぞれの値が自動的に割り当てられます。

メソッド#1(通常の配列)

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

?>


方法#2(通常の配列)

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


方法#3(連想配列)

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

それを歩く...

$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>';
    });
    
  • PHP 5.3より前

    array_walk($codes, function ($code,$key,$names){ 
        echo '<option value="' . $code . '">' . $names[$key] . '</option>';
    },$names);
    
  • または組み合わせる

    array_walk(array_combine($codes,$names), function ($name,$code){ 
        echo '<option value="' . $code . '">' . $name . '</option>';
    })
    
  • 選択して

    array_walk(array_combine($codes,$names), function ($name,$code){ 
        @$opts = '<option value="' . $code . '">' . $name . '</option>';
    })
    echo "<select>$opts</select>";
    

デモ

2

これは私のために働いた:

$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

次のようなことができると思います:

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

$ names = array( 'Tunisia'、 'United States'、 'France');

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

連想配列でも機能するはずです。

1
pashri

foreachは単一の配列でのみ機能します。複数の配列をステップ実行するには、whileループでeach()関数を使用することをお勧めします。

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

each()は、配列の現在のキーと値に関する情報を返し、内部ポインタを1つインクリメントするか、配列の最後に達した場合はfalseを返します。このコードは、同じキーを持つか、同じ種類の要素を持つ2つの配列に依存しません。 2つの配列のいずれかが終了すると、ループは終了します。

1
PerceptorII

私は、最も簡単な方法は、次のように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
SeReGa

この方法であなたのような問題を解決しました:

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

次のように反復できる配列もほとんどありません。

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()は、ショッピングカート内の製品の数量を更新するために、複数のフォーム入力からの$_POST複数の値を組み合わせながら、私にとってはうまく機能しました。

0
Calin Rusu

このようなコードは、単一配列の場合のみ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
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){

これで、各配列に$ aを使用できます。

$doors[$a]
$windows[$a]
....
}
0
Gvice

Singlr foreachループに2つの配列を置くためにこれを試してください

 `<?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 これにも良いようです

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

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

その他の利点は次のとおりです。

  • 1つの配列が他の配列より短い場合、コールバックはnull値を受信して​​ギャップを埋めます。

  • 3つ以上の配列を使用して繰り返し処理できます。

0
ankabout