2017-03-07 61 views
0

我在javascript(關聯數組)中使用數字鍵和值的對象,然後通過ajax傳遞給PHP,然後通過它。我遇到的問題是,在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,它完美的工作,我想知道你在第二部分提到的傳統方式的另一種方式,但我不知道我可以這樣做。 – Joseph

+0

不客氣:) –

+2

這很好,但是我會傳遞'object [ix ++] [「key」] = key;''和'object [ix ++] [「val」] = value;'使用'$ row [ 「key」]'和'$ row [「val」]'在PHP中。 – 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」)}'並相應地用'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

相關問題