2017-03-07 23 views
0

数値キーと値を持つjavascript(結合配列)内にオブジェクトを持ち、PHPにajaxを渡してからそれを実行します。私が持っている問題は、PHPで配列を実行することは、データが入力されたのと同じ順序で表示するのではなく、数値的にキーを搾ることによって実行されるということです。ここで連想配列の要素を入力した順序と同じ順序で取得する方法

Javascriptを

var object = new Object(); 

$("#example li").each(function(){ 
    key = $(this).attr("id"); //A number 
    value = $(this).attr("value"); //Another number 

    object[key] = value; 
}); 

// Pass the object by ajax to PHP 

    .... 

PHP

... // We retrieved the object in php 

foreach ($object as $key => $value) { 
    echo $key; 
    echo "-"; 
    echo $value; 
    echo "/"; 
} 

はjavascriotとそれがPHPでそれを横断した後に表示される順にオブジェクトに入力されたデータの例です。

Input data: 43->63 , 29->63, 33->63, 30->63, 44->63 (key->value) 

Output data: 29-63/30-63/33-63/43-63/44-63 

答えて

1

Easy、

数値キーを配列インデックスとして使用する代わりに、増分インデックスを使用し、別の配列を値として使用します。その後

var ix = 1; 
$("#example li").each(function(){ 
    key = $(this).attr("id"); //A number 
    value = $(this).attr("value"); //Another number 
    object[ix++] = [key, value]; 
} 

PHPでオブジェクトを取得するには:このように、これはまだ他の外にある場合

foreach ($object as $row) { 
    echo $row[0]; 
    echo "-"; 
    echo $row[1]; 
    echo "/"; 
} 

あなたはオールウェイズ戻って古い方法に行くことができます:)

for ($i = 1; $i< count($object); $i++) { 
    echo $object[$i][[0]; 
    echo "-"; 
    echo $object[$i][1]; 
    echo "/"; 
} 
+1

@ NelsonTeixeiraさん、本当にありがとうございます。それは完璧に機能しています。私は2番目の部分で述べた伝統的な方法の別の方法を知りたかったのですが、私はそうすることはできませんでした。 – Joseph

+0

あなたは大歓迎です:) –

+2

これは良いですが、 '$ [ PHPの "key"] 'と' $ row ["val"] ' – AbraCadaver

1

私は次のようにデータを配列に追加します。

var a = []; // post assoc 
var b = []; // post numeric 

$("#example li").each(function(){ 
    idv = $(this).attr("id"); 
    val = $(this).attr("value"); 

    a.push({id: idv, value: val}); 
    b.push([idv, val]); 
}); 

$.post('script.php',{assoc: a, numeric: b}); 

とPHP側:

foreach($_POST['assoc'] as $arr){ 
    echo $arr['id'] . '->' . $arr['value']; 
} 

foreach($_POST['numeric'] as $arr){ 
    echo $arr[0] . '->' . $arr[1]; 
} 
+0

@ Xorifelseありがとう、そのフォームは多次元配列で試してみようとしていましたが、連想配列ではどうなるか知りたかったのです。私はこのケースでは、あなたが使っているものは問題ではないことに気がつきましたが。 – Joseph

+1

連想配列を使いたい場合は、いつでも '{id:elm.attr(" id ")、value:elm.attr(" value ")}'を押して、PHPを 'echo $ arr [ 'id']。 ' - >' $ arr ['value']; ' – Xorifelse

1

代替として、あなたは配列とループとして順序を渡すことができる。

var object = new Object(); 
var order = []; 

$("#example li").each(function(){ 
    key = $(this).attr("id"); //A number 
    value = $(this).attr("value"); //Another number 

    object[key] = value; 
    order.push(key); 
}); 

// Pass the object by ajax to PHP 

アクセス順序配列の値を持つオブジェクト:

$object = $_POST['object']; 

foreach($_POST['order'] as $key) { 
    echo $object[$key]; 
} 
+0

ありがとうございました@AbraCadaver、私はそれを考えていませんでした。 – Joseph

関連する問題