繁体   English   中英

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

[英]Create new multidimensional Associative array from 2 arrays

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

我所拥有的:我有一个用php访问的mysql数据库,并且在一个记录中有一个包含所有字段(键,值对)的数组。 每个记录中都有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

    不,不是。 那是一个对象,它与数组有很大的不同。

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

    您不需要在这里eval json_encode的输出是JSON,它是可以简单执行的JavaScript的子集。

  3. changes[key[value]]=value;

    这是完全错误的,并且仍然是一维数组。 假设key是一个数组,您要做的就是将key / values转换为一个新数组。 如果之前的键看起来像这样...

     '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 ]  
}

这个 :

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];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM