从 PHP 中的会话数组中删除某个数字

Removing a certain number out of a session array in PHP

我的所有 'shop items' 旁边都有一个按钮,可以删除其中一件商店商品,但我需要它来删除一件商品,而不是删除整个数字数组,我认为这是当我找到要删除的号码时,可以使用 break 语句,但它会删除所有号码。

            if (isset($_GET['remove']) && isset($_SESSION['shopitems'])) {
            if (in_array($_GET['remove'], $_SESSION['shopitems'])) {
                for ($i = 0; $i < sizeof($_SESSION['shopitems']); $i++) {
                    if ($_SESSION['shopitems'][$i] == $_GET['remove']) {
                        $shopArray = $_SESSION['shopitems'];
                        if(sizeof($shopArray) == 1) {
                            $_SESSION['shopitems'] = null;
                            $_SESSION['added'] = null;
                        } else {
                            array_splice($shopArray, $i, $i);
                            $_SESSION['shopitems'] = $shopArray;
                        }
                        break;
                    }
                }
            }
        }

这里我检查 URL 是否包含删除变量并且设置了会话,一旦我这样做了,我检查数组是否包含放在 URL 中的数字,如果是这样我将启动一个 for 循环并检查会话商店项目的关键索引是否等于 URL 变量,如果是这样我想删除它,但是如果我使用 array_splice,突然它们都不见了,这是因为我正在使用的功能吗?还是 break 没有正确执行?

你为什么不试试 array_search() and unset()?更简单,请查看下面的代码并根据您的情况进行调整:

$array = [1, 5, 6, 12];
$wantToRemove = 5;

$key = array_search($wantToRemove, $array);
unset($array[$key]);

var_dump($array);

您可以像这样格式化您的 $_SESSION['shopitems']

$_SESSION['shopitems'] = array (
  "item_id" => "item_info",
  "item2_id" => "item2_info",
  ...
)

并执行 unset($_SESSION['shopitems'][$_GET['remove']]).

您的代码可以是:

if (isset($_GET['remove']) && isset($_SESSION['shopitems']))
   if (isset($_SESSION['shopitems'][$_GET['remove']]))
      unset($_SESSION['shopitems'][$_GET['remove']])