从2个数组创建新的多维关联数组

时间:2013-03-14 19:49:13

标签: javascript multidimensional-array associative-array porting

我正在寻找一种在javascript中创建单个多维关联数组的解决方案。

我拥有的:我有一个mysql数据库,我正在访问php,并且在一条记录中有一个包含所有字段(键,值对)的数组。他们每个记录超过30个字段,所以我正在寻找一个动态的解决方案。 在html编码中,有一个表单用于更新表中的特定记录。我在每个输入上使用函数调用来按键和值填充javascript数组。这些键与php数组中的键相同。 在函数中,我在php数组上执行json_encode调用,以获取“旧”数据,使其可以访问javascript。

什么有效:我能够从来自输入函数调用的新数据创建动态javascript关联数组。我在每次调用函数后都使用警报对此进行了测试。

我需要的:一种将javascript数组更改为多维数组的方法,将旧值拉入并将其添加到与原始键绑定的新数组中。

这有效:

var changes={}; 
function change(key,value) {
  changes[key[value]]=value;
  for (key in changes) {
    alert('key: '+key+'...  value: '+changes[key]);
  }
}

这与我正在寻找的一致:

var changes={}; 
function change(key,value) {
  var oldInfo = eval(<? echo json_encode($oldInfo); ?>); //this from the php array  
  changes[key[newValue]]=value; 
  changes[key[oldValue]]=oldInfo[key];
  for (key in changes) {
    alert('key: '+key+'...  value: '+changes[key[newValue]]);
  }
}

有人能指出我正确的方向吗?

澄清:

我的php数组$oldInfo保存表中的旧信息,例如:

{fName=>"charles",lName=>"madison", etc.}

javascript数组包含新信息:

{fName=>"Charlie",lName=>"Madison", etc.}

我想要一个新的多维数组(PHP)(或JavaScript中的对象)看起来像这样:

{fName=>{"charles","Charlie"}, lName=>{"madison","Madison"}, etc.}

lName和fName将是与PHP数组和JavaScript对象同义的关键字段。

3 个答案:

答案 0 :(得分:2)

目前还不清楚你想要什么,但你的逻辑存在一些严重的缺陷:

  1.   

    var changes={}; ///this one way of declaring array in javascript

    不,不是。这是一个Object,它与数组非常不同。

  2.   

    eval(<? echo json_encode($oldInfo); ?>);

    此处您不需要evaljson_encode的输出是JSON,它是可以简单执行的JavaScript子集。

  3.   

    changes[key[value]]=value;

    这是完全错误的,仍然是一维数组。假设key是一个数组,您所做的只是将键/值反转为一个新数组。如果键之前看起来像这样......

    'a' => 1
    'b' => 2
    'c' => 3
    

    ...然后changes看起来像这样:

    1 => 'a'
    2 => 'b'
    3 => 'c'
    

    对于多维数组,您需要两个键。你会写changes[key1][key2] = value

  4. 之类的东西
  5. 您的变量命名错误。你永远不会看到一行如下:key[value]。那是倒退。 介于[]之间,位于=的另一侧。它应该是类似array[key] = value

  6. 的内容

    RE:您的澄清:

    这不起作用:{fName=>{"charles","Charlie"},...}。你混淆了数组和对象;数组使用方括号和隐式数字键(例如["charles", "Charlie"]),而对象可以被视为具有{key1: "value1", key2: "value2"}语法的关联数组。

    你想要一个数组,其中每个键是一个属性的名称,每个值都是一个包含旧值和新值的数组。

    认为你想要的实际上非常简单,假设你传入函数的“值”是 new 值。

    var changes = {};
    var oldInfo = <?= json_encode($oldInfo) ?>;
    
    function change(key, value) {
      changes[key] = [ oldInfo[key], value ]  
    }
    

答案 1 :(得分:1)

这:

changes[key[newValue]]

应该是:

changes[key][newValue]

答案 2 :(得分:0)

  

我需要的:一种将javascript数组更改为多维数组的方法,将旧值拉入并将其添加到与原始键绑定的新数组中。

使用数字索引的别名来执行此操作:

var foo = ["Joe","Blow"];
var bar = ["joe","blow"];
var names = {};

foo.fname = foo[0];
bar.fname = bar[0];
foo.lname = foo[1];
bar.lname = bar[1];

names.fname = [foo.fname,bar.fname];
names.lname = [foo.lname,bar.lname];