查找并更改多维数组中的值(如果有重复项)


Find and change Value in multidimensional Array if there is a duplicate

我有一个二维数组。它看起来像这样:

Array (
[TOKEN] => c374fe5a38b49940b7794ea44185,
[0] => Array (
    [ID] => 1,
    [TITLE] => Product_1,
    [PRICE] => 14.99,
    [QTY] => 1,
    )
 [1] => Array (
    [ID] => 2,
    [TITLE] => Product_2,
    [PRICE] => 14.99,
    [QTY] => 1,
    )
)

如果有相同ID的产品,我想将quantity的值增加1。

我的代码是这样的:

    // PRODUCT DATA
    $res = mysqli_query($link, "SELECT * FROM products WHERE id='$pid'") or die(mysqli_error($link));
    $row = mysqli_fetch_array($res, MYSQLI_ASSOC);
    // PRODUCT ARRAY - PREPARE FOR INSERT IN ARRAY
    $product = array(
        "ID"    => $row['id'],
        "TITLE"    => $row['title'],
        "PRICE"    => $row['price'],
        "QTY"    => "1"
    );
    function array_search_recursive($needle, $haystack) {
        foreach ($haystack as $value) {
            if (is_array($value) && array_search_recursive($needle, $value)) return true;
            else if ($value == $needle) return true;
        }
        return false;
    }
    // PRODUCT ALREADY IN CART ARRAY?
    if(array_search_recursive($row['id'], $_SESSION['CART']) == TRUE){
       // INCREASE QTY BY ONE
    } else {
        // ADD PRODUCT TO ARRAY
        array_push($_SESSION['CART'], $product);
        return true;
    }
}
if(sh_add_cart($_GET['pid']) == TRUE){
    echo "PRODUCT ADDED.";
} else {
    echo "NOT ADDED.";
}

我改变了你的代码,应该做你想要实现的:

// PRODUCT ALREADY IN CART ARRAY?
if(array_search_recursive($row['id'], $_SESSION['CART']) == TRUE){
   // INCREASE QTY BY ONE
   foreach ($_SESSION['CART'] as $key => $item) {
       if(is_array($item) && isset ($item['ID'] && (int) $item['ID'] === (int) $row['id']) {
           $_SESSION['CART'][$key]['QTY']++;
       }
   }
} else {
    $_SESSION['CART'][] = $row;
}