2

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オブジェクトの両方と同義のキーフィールドになります。

4

3 に答える 3

2

何が必要かは本当にわかりませんが、ロジックにはいくつかの重大な欠陥があります。

  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;

    これは完全に間違っていますが、それでも1次元配列です。配列であると仮定するkeyと、実行しているのは、キー/値を新しい配列に反転することだけです。キーが前にこのように見える場合...

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

    ...その後、次changesのようになります。

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

    多次元配列の場合、2つのキーが必要です。あなたはのようなものを書くでしょう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 ]  
}
于 2013-03-14T20:02:32.880 に答える
1

これ :

changes[key[newValue]]

する必要があります:

changes[key][newValue]
于 2013-03-14T19:56:28.863 に答える
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];
于 2013-06-07T20:37:46.597 に答える