Почему я не могу достичь состояния соединения массива

0
<?php
    require 'header.php';
    if (isset ($_POST['id'])) {
        $productid = $_POST['id'];
        $size = $_POST['size'];
        $wasfound = false;
        $i = 0;
        if (!isset ($_SESSION['cart']) || count($_SESSION['cart']) < 1) {
            $_SESSION['cart'] = array (0 => array ("product_id" => $productid, "size" => $size, "quantity" => 1));
        }
        else {
            foreach ($_SESSION['cart'] as $eachitem) {
                $i++;
                while (list ($key, $value) = each ($eachitem)) {
                    if (($key == "product_id" && $value == $productid) && ($key == "size" && $value == $size)) {
                        array_splice ($_SESSION['cart'], $i-1, 1, array (array ("product_id" => $productid, "size" => $size, "quantity" => $eachitem['quantity'] + 1)));
                        $wasfound = true;
                    }
                }
            }
            if ($wasfound == false) {
                array_push ($_SESSION['cart'], array ("product_id" => $productid, "size" => $size, "quantity" => 1));
            }
        }
        header ("location: cart.php");
        exit ();
    }
?>

Каждый раз, когда я добавляю идентификатор product_id того же идентификатора или другого идентификатора, того же размера или другого размера, это будет новый индекс в массиве. Я не могу достичь условия array_splice в скрипте.

Мне нужно сделать условие с множественным ключом равным определенному значению. Кто-нибудь может помочь?

  • 1
    "($ key ==" product_id "&& $ value == $ productid) && ($ key ==" size "&& $ value == $ size)" этот момент для меня странный. Вы имели в виду «или» (||) вместо «и» (&&). Если ключ равен «product_id», он не может быть «size». Похоже на "строку Шредингера" :)
  • 0
    Если я хочу сделать условие с несколькими ключами и значением, равным определенному значению, как это сделать?
Теги:
arrays
if-statement
splice

1 ответ

0
Лучший ответ
    foreach ($_SESSION['cart'] as $eachitem) {
        //Magic happens here. 
        if($eachitem["product_id"] == $productId && $eachitem["size"] == $productId  ){
            array_splice ($_SESSION['cart'], $i-1, 1, array (array ("product_id" => $productid, "size" => $size, "quantity" => $eachitem['quantity'] + 1)));
            $wasfound = true;
            break;
        }
    }

Если вы хотите проверить только эти два ключа (product_id и размер), он должен работать. Вы можете увидеть небольшую инструкцию "break". Здесь, потому что, если мы найдем первое совпадение, нам не нужно смотреть дальше.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню