PHP:如何更新数组内的数组中的数据

时间:2017-04-04 14:20:40

标签: php arrays

以下是我的PHP代码:

while($row = $resp->fetch_assoc())
{
    $itemArray = array(
      array(
        'name' => $row["product_name"],
        'id' => $row["id"],
        'image' => $row['images'],
        'discount' => $row["discount"],
        'quantity' => $min_quantity,
        'price' => $row["price"]
      )
    );
}

if(!empty($_SESSION["cart_item"]))
{
    if(in_array($itemArray, $_SESSION["cart_item"]))
    {
        foreach($_SESSION["cart_item"] as $item)
        {
            if(in_array($item, $itemArray))
                $_SESSION["cart_item"][$item]["quantity"] = $min_quantity;
            break;
        }
    }
    else
    {
        $_SESSION["cart_item"] = array_merge($_SESSION["cart_item"],$itemArray);
    }
}
else
{
    $_SESSION["cart_item"] = $itemArray;
}

执行此代码后,我得到这样的回复:

Array
(
[0] => Array
    (
        [name] => Girls Designer Dress
        [id] => 4
        [image] => s:146:"2017/march/meetfashion01-04-2017_12-19-07_am.jpg,2017/march/meetfashion01-04-2017_12-19-08_am
.jpg,2017/march/meetfashion01-04-2017_12-19-09_am.jpg";
        [discount] => 10
        [quantity] => 1
        [price] => 1200
    )

)

我想要实现的目标是,如果用户在购物车中添加了相同的产品,而我们已经获得了相应的数据,而不是再创建一个数组并将i want to just update the quantity来自1的相同产品合并1}}到2

我被困在代码的这一部分

foreach($_SESSION["cart_item"] as $item)
{
    if(in_array($item, $itemArray))
    $_SESSION["cart_item"][$item]["quantity"] = $min_quantity;
    break;
}

我已经多次尝试过,如果遇到相同的产品,那么对于同一产品,数量增加1,不再创建一个数组。

任何人都可以帮助解决这个逻辑和代码吗?

2 个答案:

答案 0 :(得分:1)

$ _ SESSION [" cart-item"] 单个数组如何?

Array
(
    [name] => Girls Designer Dress
    [id] => 4
    [image] => s:146:"2017/march/meetfashion01-04-2017_12-19-07_am.jpg,2017/march/meetfashion01-04-2017_12-19-08_am
.jpg,2017/march/meetfashion01-04-2017_12-19-09_am.jpg";
    [discount] => 10
    [quantity] => 1
    [price] => 1200
)

如果是这样,那么请不要直接调用foreach,而只需使用array_search()直接检查该商品是否在$ itemArray中。

(数组中的函数搜索,如果找到了针,则返回其索引,否则返回false)。

$cartItemPosition = array_search($_SESSION['cart-item'], $itemArray);

if($cartItemPosition == false) {
  // Not found in array, so create new entry
  $itemArray.push($_SESSION['cart-item']);

}else {
  // Found in array so edit existing entry

    $itemArray[$cartItemPosition]['quantity'] = 999;  
}

答案 1 :(得分:0)

如果$itemArray只有一项:

,则以下情况有效

更改为:

if(!empty($_SESSION["cart_item"]))
    {
        if(in_array($itemArray[0], $_SESSION["cart_item"]))
            {
                foreach($_SESSION["cart_item"] as $index => $item)
                    {
                        if(in_array($item, $itemArray))
                            $_SESSION["cart_item"][$index]["quantity"] = $_SESSION["cart_item"][$index]["quantity"] + 1;
                        break;
                    }
            }
        else
            {
                $_SESSION["cart_item"] = array_merge($_SESSION["cart_item"],$itemArray);
            }
    }
else
    {
        $_SESSION["cart_item"] = $itemArray;
    }
  • in_array的第一个if语句中添加了[0]。
  • 在foreach循环中添加$index并使用它。

你的代码之前从未进入过if语句。如果$itemArray总是在数组中包含一个数组(这就是我们使用[0]的原因)那么它就应该是这样的。

如果$itemArray可能有超过1件商品,那么我们必须根据需要修改答案。

也不确定,但是如果你的fetching loop可以返回多个项目,那么这是错误的,因为你只有最后的结果。如果你知道你只有1个结果,那么一切都很好。

while($row = $resp->fetch_assoc())
    {
        $itemArray = array(
                             array(
                                    'name' => $row["product_name"],
                                    'id' => $row["id"],
                                    'image' => $row['images'],
                                    'discount' => $row["discount"],
                                    'quantity' => $min_quantity,
                                    'price' => $row["price"]
                                  )
                          );
    }