【问题标题】:Unset a value in a multi-dimensional array based on one of the values根据其中一个值取消设置多维数组中的值
【发布时间】:2018-10-22 01:23:32
【问题描述】:

我正在尝试根据查找其中一个值(产品代码)来取消设置多维数组中的一行

这是一个稍微简化的数组结构/内容:

Array ([0] => Array ( [item_id] => code1 [item_desc] => first product  [item_price] => 5.45 )
[1] => Array ( [item_id] => code2 [item_desc] => second product  [item_price] => 9.25 ))

以下工作正常,除非尝试删除数组中的第一项 [0] - 因此无法删除篮子中的第一项。

$pid = 'code2';

$key = array_search($pid, array_column($_SESSION['cart_array'], 'item_id'));

if($key) {
    unset($_SESSION['cart_array'][$key]);
    sort($_SESSION["cart_array"]);
    }

其中$pid = 'code1'的值,$key返回false,session变量内容不变

我尝试过使用 foreach 循环,它会找到值,但我似乎无法返回键

foreach ($_SESSION['cart_array'] as $search)
    {
        if($pid == $search['item_id'])
        {
        echo key($search);            // returns item_id
        }
    }

非常感谢任何帮助。

【问题讨论】:

  • foreach 中,您可以使用foreach ($_SESSION['cart_array'] as $key => $search),其中$key 是您之后的值(在您的最后一个代码中)

标签: php arrays multidimensional-array unset


【解决方案1】:

当使用array_search()的返回值时,这可能会为第一项返回0(如您所知),当您测试0时 - 这与false相同,您需要检查密钥是否不等于假的……

if($key !== false) {

【讨论】:

    【解决方案2】:

    使用更简单的方法:

    $_SESSION['cart_array'] = array_filter($_SESSION['cart_array'], function ($item) use ($pid) {
        return $item['item_id'] != $pid;
    });
    

    filters 数组中与$pid 匹配的所有项目。

    【讨论】:

      【解决方案3】:

      我想这就是你想要的。

      foreach ($_SESSION['cart_array'] as $key => $search)
      {
          if($pid == $search['item_id'])
          {
              echo $key;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2013-11-10
        • 1970-01-01
        • 2021-06-18
        • 1970-01-01
        • 2015-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-07
        相关资源
        最近更新 更多