代码之家  ›  专栏  ›  技术社区  ›  Russel Riehle

在数组中添加数组

php
  •  0
  • Russel Riehle  · 技术社区  · 7 年前

    我有一个名为“items”的$会话索引。 就像这样:

    $_会话[项目];

    当用户单击以添加项目时,我将检查$_会话[“项目”]是否存在。如果存在,则插入该项;如果不存在,则创建并插入。好啊。

    所以我编写了这个解决方案:

    $newItem = array(
        'id'=>$this->getId(),
        'red'=>$this->getRef()
    );
    
    if(isset($_SESSION['items'])) {
        array_push($_SESSION['items'],$newItem);
    } else {
        $_SESSION['items'] = $newItem;
    }
    

    好啊。 问题是: 如果出现“else”,则$newitem数组将被推入具有以下结构的$_会话['items']:

    {
    0: {
    id: "1",
    ref: "0001",
    }
    }
    

    完全如我所料。 但是,如果出现“if”语句,我的$_session['item']将释放新索引,并得到如下结构:

    {
    0: {
    id: "1",
    ref: "0001",
    },
    id: "2",
    ref: "0001",
    }
    

    如您所见,新项未设置为数组… 如果我添加了更多的iten,则此问题仅影响最后添加的项…

    我做错什么了?

    2 回复  |  直到 7 年前
        1
  •  0
  •   Script47    7 年前

    将代码更改为以下内容:

    if (isset($_SESSION['items'])) {
        array_push($_SESSION['items'],$newItem);
    } else {
        $_SESSION['items'] = [];
    
        array_push($_SESSION['items'], $newItem);
    }
    

    现在,所有的 $newItems 将被推入到实际数组中。

    产量

    array(1) {
      ["items"]=>
      array(2) {
        [0]=>
        array(2) {
          ["id"]=>
          string(2) "id"
          ["ref"]=>
          string(3) "ref"
        }
        [1]=>
        array(2) {
          ["id"]=>
          string(4) "id-2"
          ["ref"]=>
          string(5) "ref-2"
        }
      }
    }
    

    活生生的例子

    Repl -使用的虚拟数据

        2
  •  0
  •   Nikhil Joshi    7 年前

    这里的array_push似乎有问题,因为当您在$_session[items]中推送数组时,需要$newitem数组元素并在$_session[items]中推送它们。

    如果你能做到以下几点,那它就应该起作用了

    $newItem = array(
    'id'=>$this->getId(),
        'red'=>$this->getRef()
    );
    $_SESSION['items'][]= $newItem;