【问题标题】:How to prepare / build Multidimensional Array from Javascript to send to PHP如何从 Javascript 准备/构建多维数组以发送到 PHP
【发布时间】:2017-05-09 16:21:11
【问题描述】:

我必须在 PHP 中从 Ajax/Javascript 接收如下数组:

$search = $_POST['query'];
$search = array(
    'category1' => array('include' => array(93, 52),'exclude' => array(72)),
    'category2' => array('include' => array(93, 52)),
    'category3' => array('exclude' => array(72)),
    'category4' => array()
);

在我的 javascript 页面中,数组是在发送之前由用户操作构建的。 用户选择类别和项目来构建它。

例如,我最终的 javascript 数组必须如下所示:

my_array = '{
        "category1":{
            "include":["93","52"],
            "exclude":["72"]
        },
        "category2":{
            "include":["93","52"]
        },
        "category3":{
            "exclude":["72"]
        },
        "category4":[]
        }';

我尝试了许多查询。

我无法:

  • 当我的全局数组中已经存在一个类别时,在新类别中添加项目
  • 从指定类别中删除特定项目,因为标识符是一个变量:

(例如:删除 '52' in "category2":{"include":["93","52"]},

说明:

  • 类别项 ID 可以放置在指定类别的“包含”部分或“排除”部分(但不能同时放置)

  • category下的一个item(tag)可以有3个状态(class):

    • btn-default: item 没有被选中,item id 必须从指定数组中移除
    • btn-danger:项目已排除,项目 ID 必须存在于指定数组的“排除”列表中
    • btn-primary:intem 包括在内,项目 ID 必须存在于指定数组的“包含”列表中

这里是 jsfiddle 链接:JSFIDDLE

谢谢。

【问题讨论】:

  • 你能发布你的 AJAX 代码吗?
  • 如果可能的话,您最好以 json 格式发送数组。
  • 我还没有 ajax,我必须先准备好要发送的数据。我将在 POST 中将此数组发送到我的 PHP 脚本。我认为我的问题不清楚..我可以澄清

标签: javascript arrays multidimensional-array


【解决方案1】:

在 Javascript 中,这是一个数组:[],这是一个对象:{}。所以这就是我在 JS 中创建数组的方式:

var my_array = [
  {'category1':{'include':[1,2,3], 'exclude':[5]}},
  {'category2':{'include':[3,4,5], 'exclude':[6,7,8]}},
  {'category3':{'include':[1,2], 'exclude':[7]}}
  ];

这是一个演示如何将新值推送到数组中的小提琴:https://jsfiddle.net/h15emr8j/

如果你想将一个值压入数组的特定部分,你可以这样做:

my_array[0].category1.exclude.push(100);

【讨论】:

  • OK,以及如何push一个简单的值,例如'100'获取:{'category3':{'include':[1,2], 'exclude':[7,100]}}
  • @mytom 只需使用my_array.push(value)
  • @mytom 看看我的回答。我用小提琴更新了它,这样你就可以看到如何将新值推送到数组中
  • 好的,我已经尝试了这个解决方案,但发现了另一个问题。我使用一个变量(类别)来存储类别值,并且这个变量不会被解释为值。你可以在这里看到:link。你知道如何纠正吗?
  • @mytom 你必须将category 推入数组。我更新了代码:jsfiddle.net/t02donb0/4
【解决方案2】:

最简单的解决方案可能是这样的。

const jsonArray = [{
  category: {
    include: ["93", "52"],
    exclude: ["72"]
  }
  ..
}];

【讨论】:

  • 是的,但我的问题是向这个数组添加一个值。我不知道该怎么做。加'100'获取示例:exclude: ["72","100"]
  • 那么你必须这样做,例如 let value: string = 100; jsonArray[0].category.exclude.push(value);
  • 为了澄清我的问题,我做了一个新的小提琴。你能看看JSFIDDLE。 ?
【解决方案3】:

您可以按照以下逻辑来实现您想要的:

var my_array={}; // creating empty array object

my_array.category1={}; // creating new filed in my_array

var include1 = new Array(); //creating include array for category 1
include1.push("93"); // push include values
include1.push("52");

var exclude1 = new Array(); // creating exclude array for category1, if you want
exclude1.push("72"); // push exclude values


my_array.category1.include=include1; // finally add it to category1
my_array.category1.exclude=exclude1;

alert(JSON.stringify(my_array)); // convert your object to JSON string

现在,如果您想为 category1includeexclude 添加新值,那么您只需将这些值推送到它们各自的数组中.

【讨论】:

  • 好的,谢谢,但是我使用一个变量(类别)来存储类别值,并且这个变量不会被解释为值。你可以在这里看到:link。你知道如何纠正吗?
  • 为了澄清我的问题,我做了一个新的小提琴。可以看看JSFIDDLE.
【解决方案4】:

JS代码

my_array = {"category1": {"include": ["93", "52"], "exclude": ["72"]}, "category2": {"include": ["93", "52"]}, "category3": {"exclude": ["72"]}, "category4":[]};
console.log(my_array);
$.post("array.php", {query: my_array}, function( data ) {
    console.log(data);
}, "text");

PHP 代码

<?php
    $search = $_POST['query'];
    print_r($search["category1"]["exclude"]);

【讨论】:

    【解决方案5】:

    这里有一些好东西要学。在 javasript 中初始化数组:

    var arr = ['include','exclude']; 
    arr['include'] = []; 
    arr['exclude'] = []; 
    

    接下来我们需要使用 ajax 将我们的数组发送到 php 脚本:

    var jsonString = JSON.stringify(arr);
    
    $.ajax({
    url: 'myscript.php',
    type: 'POST',
    data:{
          arr: jsonString
         },
    success: function(result){
    //continue with results
    },
    error: function(result){
    //continue with results
    }
    });
    

    终于在php端:

    $arr = json_decode($_POST['arr']);
    
    //code to execute
    
    echo json_encode($arr);
    

    【讨论】:

      猜你喜欢
      • 2017-12-14
      • 2018-09-29
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 2014-01-08
      • 2012-05-21
      相关资源
      最近更新 更多