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>';
}
?>
この方法はうまくいきませんでした。助言がありますか?
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',
...
);
foreach
は、一度に1つの配列のみで動作します。
配列の構造は、array_combine()
キーと値のペアの配列にforeach
できます。
foreach (array_combine($codes, $names) as $code => $name) {
echo '<option value="' . $code . '">' . $name . '</option>';
}
または、他の回答に見られるように、代わりに連想配列をハードコーディングできます。
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()
を使用して、以前とまったく同じ配列を取得できるからです。
なぜ統合するだけではありませんか 多次元 連想配列?あなたはこれについて間違っているようです:
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
になる:
$dropdown = array('tn' => 'Tunisia', 'us' => 'United States', 'fr' => 'France');
Array_mergeを使用して2つの配列を結合し、それらを反復処理できます。
$array1 = array("foo" => "bar");
$array2 = array("hello" => "world");
$both_arrays = array_merge((array)$array1, (array)$array2);
print_r($both_arrays);
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
}
}
<?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>';
?>
これにより、配列からドロップダウンメニューが作成され、それぞれの値が自動的に割り当てられます。
<?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>';
?>
それを歩く...
$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>";
これは私のために働いた:
$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>";
}
次のようなことができると思います:
$ codes = array( 'tn'、 'us'、 'fr');
$ names = array( 'Tunisia'、 'United States'、 'France');
foreach ($codes as $key => $code) {
echo '<option value="' . $code . '">' . $names[$key] . '</option>';
}
連想配列でも機能するはずです。
foreachは単一の配列でのみ機能します。複数の配列をステップ実行するには、whileループでeach()関数を使用することをお勧めします。
while(($code = each($codes)) && ($name = each($names))) {
echo '<option value="' . $code['value'] . '">' . $name['value'] . '</option>';
}
each()は、配列の現在のキーと値に関する情報を返し、内部ポインタを1つインクリメントするか、配列の最後に達した場合はfalseを返します。このコードは、同じキーを持つか、同じ種類の要素を持つ2つの配列に依存しません。 2つの配列のいずれかが終了すると、ループは終了します。
私は、最も簡単な方法は、次のように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>';
}
この方法であなたのような問題を解決しました:
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 />";
}
次のように反復できる配列もほとんどありません。
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
複数の値を組み合わせながら、私にとってはうまく機能しました。
このようなコードは、単一配列の場合のみ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++;
}
?>
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]
....
}
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 `
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つ以上の配列を使用して繰り返し処理できます。