Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP从数组创建数组并循环_Php_Arrays - Fatal编程技术网

PHP从数组创建数组并循环

PHP从数组创建数组并循环,php,arrays,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) "r4ft

我有以下代码:

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;
}
$a=0;
$b=1;
$c=2;
foreach($tmp作为$value){
回声“
“$value[$c]”
";
$a=$a+3;
$b=$b+3;
$c=$c+3;
}
然而,输出是最奇怪的:

<option name='I' value='b'>i</option>
i
我期望和需要的输出是:

<option name='ABC' value='r4ft6tg7'>Aberdeen</option>
阿伯丁

如果您对我的错误有任何建议和反馈,我们将不胜感激。

我相信这就是您的意思:

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作为$value){
回声“
“$value[2]”
";
}
您错误地将
$tmp
视为一维和二维数组。实际上,将其设置为二维数组可以解决这个问题。正如注释中所指出的,在原始代码中,
$value
是一个字符串,访问字符串的索引就像访问数组一样会生成字符串中的给定字符

此外,为了清晰起见,您可以考虑在<代码> $tMP < /Case>中建立每个子数组。 例如。


$tmp[$item['login_id']]=array('brand'=>$item['brand']),…
然后在后一个
foreach
循环中相应地访问它。

$value
是一个字符串,因此访问
$value[$x]
将产生字符串中该索引处的任何字符…您到底想实现什么?什么是
$a
$b
$c
?啊,我正试图将我认为我们数组元素的值放入
选项
输出中。例如,
阿伯丁
@Clive-谢谢,非常感谢。我没有意识到它是一个字符串。是否应该
$tmp[$item['login\u id']=array($item['brand',$item['login\u id'],$item['name'];)”实际上是
$tmp[$item['login\u id']=array($item['brand'],$item['login\u id'],$item['name']))“半殖民地”放错地方了?是的,绝对是我的错。谢谢。没问题-谢谢你的帮助。虽然我仍然没有得到我期望的产出。我现在:-)很好,谢谢-这正是我想要的
in_array
适用于一维数组方法(只要您没有其他数据可以与您的一个登录ID具有相同的值)。但由于登录ID似乎是唯一标识每一行的值,因此按该值对数组进行索引是有意义的。因此现在它是键,所以检查键而不是数组元素。
foreach ($tmp as $value) {
    echo "<option name='".$value[0]."' 
          value='".$value[1]."'>
          ".$value[2]."
          </option>";
}