PHP从数组创建一个数组并循环遍历

时间:2014-07-06 11:37:39

标签: php arrays

我有以下代码:

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>

任何建议,反馈我出错的地方都将不胜感激。

1 个答案:

答案 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循环中相应地访问它。