我有以下代码:
foreach ($row as $item) {
if (!in_array($item['login_id'], $tmp)) {
$tmp[] = $item['brand'];
$tmp[] = $item['login_id'];
$tmp[] = $item['name'];
}
}
这提供了以下输出:
array(408) {
[0]=> string(4) "ABC"
[1]=> string(8) "r4ft6tg7"
[2]=> string(8) "Aberdeen"
[3]=> string(4) "ABC"
[4]=> string(8) "1ws3edft"
[5]=> string(18) "Birmingham Airport"
[6]=> string(4) "DDD"
[7]=> string(8) "bgt6yhnj"
[8]=> string(27) "Birmingham City"...}
我试图循环遍历此数组并使用以下内容将它们添加到下拉列表中:
$a = 0;
$b = 1;
$c = 2;
foreach ($tmp as $value) {
echo "<option name='".$value[$a]."'
value='".$value[$b]."'>
".$value[$c]."
</option>";
$a=$a+3;
$b=$b+3;
$c=$c+3;
}
然而输出最奇怪:
<option name='I' value='b'>i</option>
我预期和需要的输出是:
<option name='ABC' value='r4ft6tg7'>Aberdeen</option>
任何建议,反馈我出错的地方都将不胜感激。
答案 0 :(得分:1)
我相信这就是你的意思:
foreach ($row as $item) {
if (! array_key_exists($item['login_id'], $tmp)) {
$tmp[$item['login_id']] = array($item['brand'], $item['login_id'], $item['name']);
}
}
编辑:修正上述$tmp
的索引(以及如何检查索引)。
然后您的以下代码可以正常工作,省略$a
,$b
,$c
的增量(因此完全省略这三个变量):
foreach ($tmp as $value) {
echo "<option name='".$value[0]."'
value='".$value[1]."'>
".$value[2]."
</option>";
}
你错误地将$tmp
视为一维和二维数组。实际上将其设置为二维数组可以解决这个问题。正如评论中指出的那样,在原始代码中,$value
是一个字符串,并且访问字符串的索引就像一个数组产生字符串中的给定字符一样。
另外,为清楚起见,您可以考虑将$tmp
中的每个子阵列作为一个辅助数组。
例如。
$tmp[$item['login_id']] = array('brand' => $item['brand'], ...
然后在后一个foreach
循环中相应地访问它。