0

多次元配列に問題があります。

配列にはさまざまなアイテムがあります。

各アイテムの名前と数量が画面に表示され、各アイテムの数量を 1 ずつ変更する - および + ボタンがあります。各ボタンは同じページに戻るフォームです。

以下の例は、- ボタンをクリックしたときに呼び出される関数です。アイテムの数量から 1 を引くことになっています。

数量から 1 を正しく差し引いており、item_id は正しいです。ただし、正しい配列項目を更新していません。マイナスボタンを押すと、バスケット内の他のアイテムの下に新しいアイテムが表示されるため、実際には新しい配列アイテムを作成しているように見えます。

array_splice 呼び出しで正しい配列アイテムを参照しているとは思いません。「array_splice($_SESSION["cart_array"]」の後に「$thisKey」と言うべきではないと思います。

しかし、必要な配列アイテムを正しく参照する方法がわかりません。

お知らせ下さい。

コード:

if (isset($_POST['itemMinus']) && $_POST['itemMinus'] != "") {
// Access the array and run code to remove that array index
$thisKey = $_POST['itemMinus'];
$thisKeyQuantity = $_POST['itemMinusQuantity'];
if (count($_SESSION["cart_array"]) <= 1) {
    unset($_SESSION["cart_array"]);
} else {
    array_splice($_SESSION["cart_array"], $thisKey, 1, 
 array(array("item_id" => $thisKey, "quantity" => $thisKeyQuantity - 1)));
     }
 }

/ * ** * **** /

解決:

ソリューションへの貢献について Jeroen Bollen に感謝します。私のコードは次のように動作するようになりました:

if (isset($_POST['itemMinus']) && $_POST['itemMinus'] != "") {
// Access the array and run code to remove that array index
$thisKey = $_POST['itemMinus'];
$thisKeyQuantity = $_POST['itemMinusQuantity'];
if (count($_SESSION["cart_array"]) <= 1) {
    unset($_SESSION["cart_array"]);
} else {
    $i=0;
    foreach($_SESSION['cart_array'] as $key => $value) {
        if($value['item_id'] == $thisKey) {
            array_splice($_SESSION["cart_array"], $i, 1, array(array("item_id" => $thisKey, "quantity" => $thisKeyQuantity - 1)));
            break;
             }
              else{$i++;}//end if
         }//end foreach
     }//end else
 }//end if POST
4

1 に答える 1

0

どうですか:

foreach($_SESSION['cart_array'] as $key => $value) {
    if($value['item_id'] == $thisKey) {
        $value['quantity']--;
        break; // Stop the loop, we're done
    }
}
于 2013-11-19T18:08:15.087 に答える