如何在不创建嵌套数组的情况下将多个变量添加到数组中

时间:2017-03-13 16:01:46

标签: php arrays session

我遇到的问题比我想象的要难得多。并没有找到一个让我到达我需要的地方的答案。 目标是将事物添加到会话变量中的列表中,该变量与购物车类似。基本上有人会在列表中添加1个项目,然后添加其他项目,每个项目都会添加到数组中。但在使用各种方法后,我仍然没有得到我需要的东西。

这是用户故事

  1. 用户点击以将项目添加到列表
  2. 创建会话变量 - 将项目ID添加到会话变量
  3. 用户添加其他项目
  4. 项目添加到会话变量会话现在是一个数组
  5. 步骤3和4重复用户需要的次数。
  6. 这一切都需要进入一个没有嵌套的平面阵列。
  7. 以下代码似乎是正确的解决方案。但是它只返回最新的项ID,并且不会创建数组。我有其他创建数组的解决方案,但是它们为每个附加项创建嵌套数组,所以不是我需要的。任何帮助,将不胜感激。

    jQuery( function() {
                    var articleID         = jQuery('#articleID').val();
                    Dropzone.autoDiscover = false;
                    var myDropzone = new Dropzone('#media-uploader', {
                    url: "url?action=kl_upload_article_images",
                    acceptedFiles: 'image/*',
                    maxFilesize : 50,
                    previewTemplate: $('#preview-template').html(),
                    thumbnailHeight: 120,
                    thumbnailWidth: 120,
                    parallelUploads: 100,
                    uploadMultiple: true,
                    autoProcessQueue: false,
                    addRemoveLinks : true,
                    autoProcessQueue : false,
                    //removedfile is called whenever file is removed from the list 
                    removedfile : function(file)
                    {
                        var imageName = file.name;
                        var confirmation = confirm('Are you sure you want to delete this image?');
                        if(confirmation == true)
                        {
                //post request to remove file from server
                            $.post("url?action=kl_delete_article_images&image_name=" + imageName +"&article_id="+ articleID);
                //deleting thumbnails
                            var _ref;
                            return (_ref = file.previewElement) != null ? _ref.parentNode.removeChild(file.previewElement) : void 0;
                        }
                    },
                    init: function()
                    {
                       dropZoneObject = this;
              //getting file name and directory to preview stored images in dropzonejs
                      $.get("url?action=kl_edit_article_images&article_id=" + articleID,function(data)
                      {
              //looping through each data to preview images 
                      $.each(data,function(key,value)
                       {
                   var mockFile = {name:value.name,size:value.size};
                   dropZoneObject.emit("addedfile", mockFile);
                   var fileUrl = 'fileDirectory/';?>'+value.name;
                   dropZoneObject.emit("thumbnail", mockFile, fileUrl);
                   dropZoneObject.emit("complete", mockFile);
                  });
              //end of loop
    
              dropZoneObject.on('sending', function(file, xhr, formData)
              {
                   formData.append('articleId', articleID);
              });
               });
        }
    });
    

    $ itemAdded = $ _REQUEST [' pPageItemID']; $ currentItems = $ _SESSION [' ITEM_IDS'];

    //如果已设置会话,请将其更改为数组以添加多个ID if(isset($ _ SESSION [' ITEM_IDS'])){

    //Request Item From Post
    

    }

    //如果Session不是create session var并添加产品ID,请检查Session是否已设置 if(is_null($ _ SESSION [' ITEM_IDS'])){

    //Check to see if this is acutally a form post and then set session
    if (isset($_REQUEST['pPageItemID'])){
    
        $newItems = array_merge($currentItems, $itemAdded);
    
        //Set new session with old and new IDs
        $_SESSION['ITEM_IDS'] = $newItems;
    }
    

    }

1 个答案:

答案 0 :(得分:0)

我想出来了。我的问题是假设PHP将单个变量理解为具有单个变量的数组。我错了!

一个简单的修复 - 我只需要在合并期间将其定义为数组。更新了下面的代码,它工作得非常好。

$newItems = array_merge((array)$currentItems, (array)$itemAdded);