【问题标题】:PHP - Array Unique and count elementsPHP - 数组唯一和计数元素
【发布时间】:2016-02-10 12:41:12
【问题描述】:

我正在开发一个购物车,但遇到了关于独特购买的问题。

假设有一个产品“产品A”,用户购买了该商品4次,他们的购物车显示为“4”个商品在购物篮中,存储为:

$items = [
  "Product A" => array (),
  "Product A" => array(),
  "Product B" => array()
];

当他们查看购物车时,我希望它显示:

Product:          Quantity:

"Product A"          2
"Product B"          1

因此,问题是,是否可以使用计数来执行array_unique?那么,我可以存储所有独特的商品,还可以获得他们订购的商品数量?或者有没有其他方法可以解决这个问题?

【问题讨论】:

  • 你的初始数组结构是不可能的,你不能有两次相同的键......你如何存储产品和一个数量计数器
  • $items = ["Product A" => array(), "Product A" => array()"] 无效。同一个键在一个数组中只能出现一次。
  • 在将产品添加到购物车之前使用in_array()
  • 我认为您应该更改您的查询?并尝试改进它。因此您将直接使用您的查询获得此类数据

标签: php arrays


【解决方案1】:

以下是逻辑。

1) 创建一个空白的产品购物车数组。

2) 向数组添加项目时,检查array_key_exists()

3) 如果不存在,则将项作为键添加到数组中,并将数量作为值(这是数量)。

4) 如果存在,将数量加一。

就是这样。

【讨论】:

  • 不是in_array,而是issetarray_key_exists...!
  • @pupil - 谢谢。但是我怎样才能得到购物篮中的产品总量呢?
【解决方案2】:

您可能想要更改数组的结构:

$items = [];

function addItem($name, array $data = []){
    global $items;
    $items[$name][] = $data;
}

function countItem($name){
    global $items;
    return count($items[$name]);
}

所以$items 最终会变成这样:

$items = [
    "Product A" => [
        array(),
        array(),
    ],
    "Product B" => [
        array()
    ]
];

$array[] = $element 将创建一个空数组$array,如果它未定义。同样,$array["a"][] = $element 将创建一个空数组$array["a"],如果它尚未定义。

或者如果你只想存储一个计数,你必须在使用$array["a"]++递增之前使用if(!isset($array["a"])) $array["a"] = 0;

【讨论】:

    猜你喜欢
    • 2012-04-28
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    • 2018-06-24
    • 2019-07-26
    • 2011-01-17
    • 2011-12-05
    • 2015-04-18
    相关资源
    最近更新 更多