嵌套数组和foreach循环

时间:2015-05-07 10:49:20

标签: php arrays foreach

我需要以某种方式创建一个函数,从一个数组获取一个值,然后另一个数组合并它们。

这就是我的意思:

我有一个名为products的数组,其中包含所有产品信息(名称,价格等)和一个名为cart的数组,其中包含特定产品ID及其数量。

现在我想计算购物车的总价格,这意味着我需要以某种方式访问​​两个foreach循环(我需要从数组循环中获取价格并使用购物车循环的数量增加它)..这是我到目前为止所尝试的:

public function getTotalCart($items, $cart)
{
    $total = 0;  // the final price(with discount, tax and etc) of a single product(without quantity)
    $qtyTotal = 0;  /// the final price with the quantity

    foreach ($items as $item) {
        $total = $item->getFinal();  // I am getting the final price of the item

        foreach ($cart as $id=>$quantity) {      
            $qtyTotal += $quantity * $total;  // I am incrementing the quantity of the product with the products final price.
        }
    }

    return $qtyTotal;
} 

当我有一个产品时,这是有效的,但如果我添加另一个产品,定价是错误的......任何想法?

3 个答案:

答案 0 :(得分:1)

如果 $ cart 是一个数组,其中键对应于商品ID和数量值,您可以这样做:

foreach ($items as $item) {
    if (array_key_exists($item->getId(), $cart)) {
        $qtyTotal += $cart[$item->getId()] * $item->getFinal();
    }
}

答案 1 :(得分:0)

您必须检查购物车中的class EntryResource(ModelResource): def hydrate(self, bundle): if field in bundle.data: date = bundle.data['pub_date'] bundle.data['pub_date'] = time.strptime(date, "%Y-%m-%d %H:%M:%S") return bundle 是否与$id ID相同。

$item

更好的是,让... foreach($cart as $id=>$quantity) { if ($id == $item->getId()) { $qtyTotal += $quantity * $total; } } ... 数组id-indexed,然后只迭代推车:

$items

答案 2 :(得分:0)

我认为第二个foreach正在打破它。 使用第一个foreach你循环项目,如果你说的是正确的,那个购物车有相同的项目,它将为你拥有的每个项目执行购物车循环。 因此,如果您有4个项目,那么您将通过第一个foreach进行一次,但是您将通过第二个项目进行16次。 也许你可以做类似

的事情
getItem()