2

我有一个看起来像这样的数组

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

我正在尝试为每个模型绘制徽标,为其数量绘制徽标,因此三星 = 3、索尼 = 7 等等将绘制 3 个索尼徽标和 7 个三星徽标。

我想出了这样的东西

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

但当然,所有这些都是针对每个数组条目,回显名称,所以我最终会打印 5 个三星,打印 5 个索尼等。

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

4

7 回答 7

1

为什么不通过使用函数来简化它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 . '.';
}

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

于 2013-03-05T00:30:59.010 回答
1

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

于 2013-03-05T00:35:50.113 回答
0

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

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

foreach($combined as $model => $qty) {
    # …
}
于 2013-03-05T00:25:45.000 回答
0

我认为您正在尝试这样做:

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 />';
}
于 2013-03-05T00:27:09.973 回答
0

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

for (i=0; i<count($foreacharray["model"]); i++)
{
    $model = $foreacharray["model"][i];
    $qty = $foreacharray["qty"][i];
    echo "$model: $qty";
}
于 2013-03-05T00:31:14.257 回答
0
// #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);
}

但最好确实从源头上改变这一点。

于 2013-03-05T00:32:23.597 回答
0

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

于 2013-03-05T00:43:47.997 回答