在PHP中添加数组

时间:2015-09-05 11:01:20

标签: php

我有n个文本框来获取产品名称及其数量。所以我使用PHP数组来获取值并且其工作正常。我尝试了逻辑,如果用户提供重复的产品,然后删除重复的产品,但他们的数量添加了相同的产品。

<form method="post" action ="insert.php">
<input type =text name ="products[]" value = "">
<input type =text name ="quantity[]" value = "">
<!-- ...........
n numbers of textbox to add the products and quantity
--------- -->

<input type ="submit" value="submit"> </form>

insert.php:

$products = $_POST['products'];
$quantity = $_POST['quantity'];
for($i=0;$i<count($products);$i++)
 {
$query = "INSERT INTO table_name (`products`,`quantity`) VALUES ('$products[$i]','$quantity[$i]')";
mysql_query($query);
}

阵列就像

$products[0] = "Apple"  $quantity[0] = "20"
$products[1] = "Orange"  $quantity[1] = "10"
$products[2] = "Apple"  $quantity[2] = "30"

这里的产品名称apple是重复的,它发生两次。所以我删除了重复的名称apple,它们的数量值应该像50(20 + 30)

一样添加

2 个答案:

答案 0 :(得分:1)

首先,我会规范化表格,只需插入product_id(主键),数量并执行以下操作(使用带绑定的变量):

INSERT INTO stock (product_id,quantity) VALUES ($1,$2 ) ON DUPLICATE KEY UPDATE quantity = quantity + $2

如果表格中已有Apples(id = 2),我们会更新数量

如果你不想规范化这些表并使用你所拥有的相同的表:

  1. 制作product列主键

  2. 使用INSERT INTO stock (product,quantity) VALUES ($1,$2 ) ON DUPLICATE KEY UPDATE quantity = quantity + $2

  3. 或(但我真的不喜欢):

    $distinct = array();
    foreach($products as $index=>$product) {
        if(!isset($distinct[$product])) {
            $distinct[$product] = $quantity[$index];
        } else {
            $distinct[$product] += $quantity[$index];
        }
    }
    

答案 1 :(得分:0)

尝试这样的事情:

$products = $_POST['products'];
$quantity = $_POST['quantity'];
$productQuantity = array();

foreach($products as $key => $product) {
    if (!array_key_exists($product, $productQuantity) {
        $productQuantity[ $product ] = 0;
    }
    $productQuantity[ $product ] += $quantity[ $key ];
}

然后你将得到一个数组

$productQuantity['Apple'] => 50
$productQuantity['Orange'] => 10

因此,要将其添加到数据库,您可以执行以下操作:

foreach($productQuantity as $name => $qty) {
    $query = "INSERT INTO table_name (`products`,`quantity`) VALUES ('$name','$qty')";
    mysql_query($query);
}