我用javascript创建了两个数组,即模块和权重。模块数组包含模块的id,权重数组包含相应的权重。我创建了一个多维数组,以模块id为键,以相应的权重为值。到目前为止我做了什么
//module array
modules = [74,82,83]
//weight array
weights = [70,10,20]
//created array
moduleWeights = [74: 70, 82: 10, 83: 20]
我已经通过以下代码创建了"moduleWeights"数组
for(i=0;i<modules.length;i++)
{
moduleWeightArray[modules[i]] = weights[i];
}
当我通过AJAX将这个数组传递给PHP时,我得到了类似于的东西
Array(
[0] =>
[1] =>
[2] =>
.
.
.
[74] => 70
.
.
[82] => 10
[83] => 20
)
即阵列的长度从3增加到84,这是正确的。为什么会这样?我在像这样的后请求中传递数组
$.ajax({
type: 'POST',
url: 'url',
data: {data:moduleWeightArray},
dataType: 'json',
success: function(response)
{
}
})
如有任何帮助,我们将不胜感激。提前感谢
您想要的是一个关联的对象,而不是数组。当您创建一个Javascript数组并将其索引74
设置为一个值时,在此之前有一个隐含值0
到73
。这就是你所看到的。若要具有任意键值关联,您需要一个对象而不是数组。
var moduleWeights = { 74 : 70, 82 : 10, 83 : 20 };
发生这种情况是因为您使用的是数组。你可能有
moduleWeightArray = [];
在某个地方,你应该使用
moduleWeightArray = {};
问题是,当序列化数组时,它总是将所有索引序列化到最大的索引(默认值为undefined
)。还有一个JavaScript的怪异之处。您应该使用对象/字典。