2013-03-05 241 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次。你的代碼的工作原理是如何寫入的。