2013-03-05 240 views
2

我有一个数组,看起来像这样嵌套foreach循环

$foreacharray = array(
    "model" => array ("samsung", "sony", "philips", "acer", "hp"), 
    "qty" => array("3", "7", "5", "1", "8"), 
); 

我试图做的是的foreach模型,绘制标志其数量的量,使三星= 3,索尼= 7等等将画出3个索尼徽标和7个三星徽标。

我想出了这样的事情

foreach ($foreacharray["model"] as $model) 
{ 
    foreach($foreacharray["qty"] as $qty) 
    { 
     echo $model; 
     echo '<br>'; 
    } 
} 

但当然一切确实是各自为阵的条目,呼应出了名,所以我结束了正在印刷5和三星正在打印5和索尼等

我该如何使用qty数组的值而不是条目数呢?

+5

您是否控制了数组的生成?如果是这样,只需生成一个以模型为关键字,数值为数值的单个数组。 – 2013-03-05 00:24:34

+1

是的,它很容易回答这个问题,但我与@马克帕内尔 – hek2mgl 2013-03-05 00:25:14

+1

@马克你应该张贴作为答案。已经有“答案”直接回答了这个问题。然而,有时最好的答案是让某人走上完全不同的轨道。问:用电锯剁胡萝卜最好的方法是什么? A.放下电锯并使用小刀。 – csj 2013-03-05 00:31:34

回答

2

为什么不使用功能array_combine使这个简单?

http://www.php.net/manual/en/function.array-combine.php

实施例;

$newArray = array_combine($foreacharray[0], $foreacharray[1]); 
var_dump($newArray); 
// will output 
array (
    "samsung" => 3, 
    "sony" => 7, 
    "philips" => 5, 
    "acer" => 1, 
    "hp" => 8, 
) 

然后你就可以轻松搞定所有的值或像这样显示出来......

foreach($newArray as $key => $val) { 
    echo $key . ' has a quantity of ' . $val . '.'; 
} 

希望这使得它更容易。

+0

很多,谢谢你的例子! – 2013-03-05 00:42:52

1

您可以使用array_combine使用型号为键和数量的值,假设模型是独特的:

$combined = array_combine($foreacharray['model'], $foreacharray['qty']); 

foreach($combined as $model => $qty) { 
    # … 
} 
+0

谢谢!我从来不知道array_combine,这会派上用场。 – 2013-03-05 00:41:19

1

我想你想做到这一点:

for($i = 0, $e = count($foreacharray["model"]); $i < $e; ++ $i) { 
    echo $foreacharray["model"][$i] . ' = ' . $foreacharray["qty"][$i] . '<br />'; 
} 

基本上,单循环引用两个数组在相同的索引处。

你也可以使用的foreach,如果你愿意的话,像这样:

foreach($foreacharray["model"] as $key => $model) { 
    echo $model . ' = ' . $foreacharray["qty"][$key] . '<br />'; 
} 
0

迭代使用数组的数组索引代替,例如:

for (i=0; i<count($foreacharray["model"]); i++) 
{ 
    $model = $foreacharray["model"][i]; 
    $qty = $foreacharray["qty"][i]; 
    echo "$model: $qty"; 
} 
1
// #1 using one for keys, another for values: 
foreach(array_combine($foreacharray['model'],$foreacharray['qty']) as $model => $nr){ 
     var_dump($model,$nr); 
} 
// #2 map them with null: 
foreach(array_map(null,$foreacharray['model'],$foreacharray['qty']) as $data){ 
     var_dump($data); 
} 
// #3 iterators! 
$iterator = new MultipleIterator(); 
$iterator->attachIterator(new ArrayIterator($foreacharray['model'])); 
$iterator->attachIterator(new ArrayIterator($foreacharray['qty'])); 
foreach($iterator as $data){ 
     var_dump($data); 
} 

但最好将确实在源会改变这一点。

2

如果您首先控制了数组的生成,那么您最好只生成一个以模型作为关键字并将qty作为值的单个数组,而不是生成2个单独的数组。

+0

我甚至没有想过这样做。谢谢。 – 2013-03-05 00:40:42

0

你的$foreacharray["qty"]有5个元素,因为当你循环这个foreach,它打印所有的$foreacharray["model"]元素5次。你的代码的工作原理是如何写入的。