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



我正在寻找一个在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对象的同义关键字段。

你真的不清楚你想要什么,但是你的逻辑有几个严重的缺陷:

  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. 变量命名错误。你不应该看到这样的行:key[value]。这是倒退。位于[]之间,位于=的另一侧。应该是array[key] = value之类的。

RE:你的澄清:

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

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

认为你想要的实际上很简单,假设你传递给函数的"值"是新的值。

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

This:

changes[key[newValue]]
应:

changes[key][newValue]

我需要的:一个方法来改变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];

相关内容

  • 没有找到相关文章

最新更新