嵌套的foreach循环

时间:2013-03-05 00:22:31

标签: php arrays 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个samsungs正在打印5个索尼被打印等。

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

7 个答案:

答案 0 :(得分: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 . '.';
}

希望这会让事情变得更容易。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

假设模型是唯一的,您可以使用array_combine将模型用作键和数量作为值:

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

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

答案 3 :(得分: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 />';
}

答案 4 :(得分: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);
}

但最好的确在改变这一点。

答案 5 :(得分:0)

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

for (i=0; i<count($foreacharray["model"]); i++)
{
    $model = $foreacharray["model"][i];
    $qty = $foreacharray["qty"][i];
    echo "$model: $qty";
}

答案 6 :(得分:0)

您的$foreacharray["qty"]有5个元素,因此当您按foreach循环时,它会打印所有$foreacharray["model"]个元素5次。您的代码如何编写,如何编写。