Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将二维javascript数组转换为JSON_Php_Javascript_Jquery_Arrays_Json - Fatal编程技术网

Php 将二维javascript数组转换为JSON

Php 将二维javascript数组转换为JSON,php,javascript,jquery,arrays,json,Php,Javascript,Jquery,Arrays,Json,我尝试了几种不同的json方法(stringify、toJSON,出于绝望,可能还有一些完全不相关的方法),但似乎不知道如何将其字符串化,以便将其传递给php脚本。我能够创建一个二维数组,它可以表示如下: array( 'image'=>array( 0=>'hello.jpeg', 1=>'goodbye.jpeg', 2=>'etc.jpeg'), 'resume'=>array(

我尝试了几种不同的json方法(stringify、toJSON,出于绝望,可能还有一些完全不相关的方法),但似乎不知道如何将其字符串化,以便将其传递给php脚本。我能够创建一个二维数组,它可以表示如下:

array(
    'image'=>array(
        0=>'hello.jpeg', 
        1=>'goodbye.jpeg', 
        2=>'etc.jpeg'),
    'resume'=>array(
        0=>'resume.doc'),
    'reel'=>array(
        0=>'reel.mov')
    )
var fileArray = {
  'image' : [ 'hello.jpeg',
             'goodbye.jpeg',
             'etc.jpeg'],
  'resume' : [ 'resume.doc' ],
  'reel' : [ 'reel.mov' ]
};
当我使用这个函数将数组打印到控制台时,它看起来很好。我试图弄明白如何让它与对象一起工作,因为我认为我读到一些东西说对象已经是JSON友好的了,但由于我对javascript不是非常熟悉,所以我一直在苦苦挣扎

编辑:更多详细信息。。。我的数组的声明(当我让它工作时)是这样的,尽管我可能搞砸了:

var fileArray = [];
fileArray['image'] = [];
fileArray['resume'] = [];
fileArray['reel'] = [];

var type;
var name;

var divs = $("#upload-container").children('div');

$.each(divs, function() {
    type = $(this).attr('id');
    name = $(this).html();

    fileArray[type].push(name);
});

该数组结构的对象在JavaScript中可能如下所示:

var objects = 
[
    {
        'image': [
            { '0': 'hello.jpeg' },
            { '1': 'goodbye.jpeg' },
            { '2': 'etc.jpeg' }
        ]
    },
    {
        'resume': [
            { '0': 'resume.doc' }
        ]
    },
    {
        'reel': [
            { '0': 'reel.mov' }
        ]
    }
]
现在您已经有了一个由三个对象组成的数组,每个对象都包含一个属性(image、resume、reveel),这是另一个基本上具有key:value对的对象数组(
'0':'hello.jpeg'
)。也许您可以简化它,不必费心使用索引:

var objects = 
[
    {
        'image': [ 'hello.jpeg', 'goodbye.jpeg', 'etc.jpeg' ]
    },
    {
        'resume': [ 'resume.doc' ],
    },
    {
        'reel': [ 'reel.mov' ]
    }
]

然后您可以使用
JSON.stringify(objects)
传递给您的PHP操作。

该数组结构的对象在JavaScript中可能如下所示:

var objects = 
[
    {
        'image': [
            { '0': 'hello.jpeg' },
            { '1': 'goodbye.jpeg' },
            { '2': 'etc.jpeg' }
        ]
    },
    {
        'resume': [
            { '0': 'resume.doc' }
        ]
    },
    {
        'reel': [
            { '0': 'reel.mov' }
        ]
    }
]
现在您已经有了一个由三个对象组成的数组,每个对象都包含一个属性(image、resume、reveel),这是另一个基本上具有key:value对的对象数组(
'0':'hello.jpeg'
)。也许您可以简化它,不必费心使用索引:

var objects = 
[
    {
        'image': [ 'hello.jpeg', 'goodbye.jpeg', 'etc.jpeg' ]
    },
    {
        'resume': [ 'resume.doc' ],
    },
    {
        'reel': [ 'reel.mov' ]
    }
]

然后您可以使用
JSON.stringify(objects)
传递给您的PHP操作。

PHP端的示例预期输出有一个包含数字数组的关联数组。JavaScript数组具有数字索引:如果希望字符串作为键,请使用普通对象而不是数组,因为JavaScript对象的行为类似于您从PHP想到的关联数组。相应的JavaScript对象应如下所示:

array(
    'image'=>array(
        0=>'hello.jpeg', 
        1=>'goodbye.jpeg', 
        2=>'etc.jpeg'),
    'resume'=>array(
        0=>'resume.doc'),
    'reel'=>array(
        0=>'reel.mov')
    )
var fileArray = {
  'image' : [ 'hello.jpeg',
             'goodbye.jpeg',
             'etc.jpeg'],
  'resume' : [ 'resume.doc' ],
  'reel' : [ 'reel.mov' ]
};
在用方括号定义的数组中,暗示了数字索引。请注意,
fileArray
是用大括号而不是方括号定义的,因此不是数组(不管名称如何)。如果要一次设置一个属性,这仍然允许您使用
fileArray['image']=…
语法:

var fileArray = {}; // an object, not an array
fileArray['image'] = [];
fileArray['resume'] = [];
fileArray['reel'] = [];  
请注意,初始声明中的花括号使其成为对象,但仍使用方括号语法访问属性


fileArray
定义为带方括号的JavaScript数组的方式仍然允许添加基于字符串的键属性,因为数组是对象,但是JSON stringify例程可能会忽略这些属性,而只序列化数字索引属性。

PHP端的示例预期输出有一个包含数字数组的关联数组。JavaScript数组具有数字索引:如果希望字符串作为键,请使用普通对象而不是数组,因为JavaScript对象的行为类似于您从PHP想到的关联数组。相应的JavaScript对象应如下所示:

array(
    'image'=>array(
        0=>'hello.jpeg', 
        1=>'goodbye.jpeg', 
        2=>'etc.jpeg'),
    'resume'=>array(
        0=>'resume.doc'),
    'reel'=>array(
        0=>'reel.mov')
    )
var fileArray = {
  'image' : [ 'hello.jpeg',
             'goodbye.jpeg',
             'etc.jpeg'],
  'resume' : [ 'resume.doc' ],
  'reel' : [ 'reel.mov' ]
};
在用方括号定义的数组中,暗示了数字索引。请注意,
fileArray
是用大括号而不是方括号定义的,因此不是数组(不管名称如何)。如果要一次设置一个属性,这仍然允许您使用
fileArray['image']=…
语法:

var fileArray = {}; // an object, not an array
fileArray['image'] = [];
fileArray['resume'] = [];
fileArray['reel'] = [];  
请注意,初始声明中的花括号使其成为对象,但仍使用方括号语法访问属性



fileArray
定义为带方括号的JavaScript数组的方式仍然允许添加基于字符串的键属性,因为数组是对象,但是JSON stringify例程可能会忽略这些属性,而只序列化数字索引属性。

你确定外部结构是数组吗?我想是的。如果变量名为fileArray,那么每个元素将类似于fileArray['image'][0]、fileArray['image'][1]、fileArray['image'][2]、fileArray['resume'][0]和fileArray['reel'][0]。我这样问是因为通常我们会使用对象,而不是数组。是的,部分问题在于声明对象和混淆语法。我想在php中做的事情的等价物是这样的:foreach($key=>$var){fileArray[$key][]=$var;},其中在“key”分支下分类有多个“vars”。但是。。。JavaScript不是PHP。你确定外部结构是数组吗?我想是的。如果变量名为fileArray,那么每个元素将类似于fileArray['image'][0]、fileArray['image'][1]、fileArray['image'][2]、fileArray['resume'][0]和fileArray['reel'][0]。我这样问是因为通常我们会使用对象,而不是数组。是的,部分问题在于声明对象和混淆语法。我想在php中做的事情的等价物是这样的:foreach($key=>$var){fileArray[$key][]=$var;},其中在“key”分支下分类有多个“vars”。但是。。。JavaScript不是PHP。但是如何动态声明它?push对我来说对对象不起作用。但你不是在推对象,而是在推对象属性中存储的数组。如果你只是将fileArray的初始声明更改为
var fileArray={}
,那么你的代码应该可以正常工作。接下来的三行添加属性
image
resume
reveel
,每个属性都是一个数组。在
中。每个
循环
fileArray[type]
访问其中一个数组,然后
fileArray[type].push(名称)
将name值推送到关联的array.yes中,就是这样。伊格纳西奥,谢谢你!但是,这将如何动态声明?推一推对一个机器人不起作用