创建来自2个阵列新多维关联数组(Create new multidimensional Associ

2019-07-21 16:07发布

我要寻找一个解决方案,在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.}

L-NAME和FNAME将是同义的PHP阵列和JavaScript对象两者键字段。

Answer 1:

这真的不清楚你想要什么,但也有一对夫妻带着你的逻辑存在严重缺陷的:

  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是一个数组,你正在做的是键/值翻转到一个新的数组。 如果键看起来像在此之前...

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


Answer 2:

这个 :

changes[key[newValue]]

应该:

changes[key][newValue]


Answer 3:

我需要什么:一种方法对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];


文章来源: Create new multidimensional Associative array from 2 arrays