foreach 循环中的两个数组
Posted
技术标签:
【中文标题】foreach 循环中的两个数组【英文标题】:Two arrays in foreach loop 【发布时间】:2011-05-27 17:15:03 【问题描述】:我想使用两个数组生成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>';
?>
这种方法对我不起作用。有什么建议吗?
【问题讨论】:
两个数组一循环 【参考方案1】: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',
...
);
【讨论】:
在解析表单字段数组时很有用。 这就是所谓的智能编码 避免以非功能代码开始你的答案,只是稍后说它不起作用。否定陈述跨越多个段落时应以否定开头【参考方案2】:foreach
一次只对一个数组进行操作。
你的数组的结构方式,你可以array_combine()
他们成一个键值对数组,然后foreach
那个单一数组:
foreach (array_combine($codes, $names) as $code => $name)
echo '<option value="' . $code . '">' . $name . '</option>';
或者如其他答案所示,您可以改为硬编码关联数组。
【讨论】:
这也可以用于三个数组吗? @xjshiya 不,如果你给他们 3 个参数,你会得到警告:array_combine() 需要 2 个参数,给定 3 个【参考方案3】:使用array_combine()
将数组融合在一起并迭代结果。
$countries = array_combine($codes, $names);
【讨论】:
【参考方案4】:使用关联数组:
$code_names = array(
'tn' => 'Tunisia',
'us' => 'United States',
'fr' => 'France');
foreach($code_names as $code => $name)
//...
我相信与使用 array_combine()
相比,使用关联数组是最明智的方法,因为一旦有了关联数组,您就可以简单地使用 array_keys()
或 array_values()
来获得与之前完全相同的数组.
【讨论】:
+1array_combine()
已经生成了一个关联数组,您可能希望更清楚地了解初始化它是关联的。【参考方案5】:
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);
其他好处是:
如果一个数组比另一个数组短,回调接收null
值来填补空白。
您可以使用超过 2 个数组进行迭代。
【讨论】:
【参考方案6】:这对我有用:
$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>";
【讨论】:
【参考方案7】:您的代码不正确,因为 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++;
?>
【讨论】:
就像一个魅力。谢谢你的回答:)【参考方案8】:为什么不直接合并成一个多维关联数组呢?好像你正在处理这个错误:
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
变成:
$dropdown = array('tn' => 'Tunisia', 'us' => 'United States', 'fr' => 'France');
【讨论】:
称为关联数组,不是多维数组。【参考方案9】:您可以使用 array_merge 组合两个数组,然后对其进行迭代。
$array1 = array("foo" => "bar");
$array2 = array("hello" => "world");
$both_arrays = array_merge((array)$array1, (array)$array2);
print_r($both_arrays);
【讨论】:
【参考方案10】:全部经过全面测试
从数组中创建动态下拉列表的 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>';
?>
【讨论】:
hm... 不赞成投票。 Downvoter,理由和关心详细说明?显然完成了“只是因为”。嗯~ 这些不都是一回事吗?除了变量名称之外,我没有看到任何显着差异。【参考方案11】:走出来……
$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>";
demo
【讨论】:
【参考方案12】:<?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>';
?>
【讨论】:
【参考方案13】:foreach 仅适用于单个数组。要逐步遍历多个数组,最好在 while 循环中使用 each() 函数:
while(($code = each($codes)) && ($name = each($names)))
echo '<option value="' . $code['value'] . '">' . $name['value'] . '</option>';
each() 返回有关数组当前键和值的信息,并将内部指针加一,如果到达数组末尾则返回 false。此代码将不依赖于具有相同键或具有相同类型元素的两个数组。当两个数组之一完成时循环终止。
【讨论】:
【参考方案14】:试试这个而不是 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
【讨论】:
【参考方案15】:array_combine()
对我来说非常有用,同时结合来自多个表单输入的多个值 $_POST
以尝试更新购物车中的产品数量。
【讨论】:
【参考方案16】:我认为你可以这样做:
$codes = array('tn','us','fr');
$names = array('突尼斯','美国','法国');
foreach ($codes as $key => $code)
echo '<option value="' . $code . '">' . $names[$key] . '</option>';
它也应该适用于关联数组。
【讨论】:
【参考方案17】:我认为最简单的方法就是这样使用 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>';
【讨论】:
【参考方案18】: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]
....
【讨论】:
【参考方案19】:我通过这种方式解决了像你这样的问题:
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 />";
【讨论】:
【参考方案20】:您应该尝试将 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 `
【讨论】:
【参考方案21】:很少有数组也可以这样迭代:
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,
);
【讨论】:
【参考方案22】:这仅在两个数组具有相同计数时才有效。我尝试在 laravel 中,将两个数组都插入到 mysql db 中
$answer = "0":"0","1":"1","2":"0","3":"0","4":"1"; $reason_id = "0":"17","1":"19","2":"15","3":"19","4":"18";
$k= (array)json_decode($answer);
$x =(array)json_decode($reason_id);
$number = COUNT(json_decode($reason_id, true));
if($number > 0)
for($i=0; $i<$number; $i++)
$val = new ModelName();
$val->reason_id = $x[$i];
$val->answer =$k[$i];
$val->save();
【讨论】:
正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。【参考方案23】:对我有用
$counter = 0;
foreach($codes as $code)
$codes_array[$counter]=$code;
$counter++;
$counter = 0;
foreach($names as $name)
echo $codes_array[$counter]."and".$name;
$counter++;
【讨论】:
以上是关于foreach 循环中的两个数组的主要内容,如果未能解决你的问题,请参考以下文章
PHP 数组遍历方法大全(foreach,list,each)