簡體   English   中英

在PHP中循環遍歷對象數組

[英]Loop over array of objects in PHP

我在jQuery中創建一個對象數組。

var selected_tests = $("#selected_tests").find("tr");
jsonLab = [];
$.each(selected_tests, function() {
  jsonLab.push({
    test: ($(this).children()).eq(0).text(),
    amount: ($(this).children()).eq(1).text()
  });
});

我將此數組發布到PHP文件中

$('<input type="hidden" name="jsonLab"/>').val(jsonLab).appendTo('#bill_print');
$("#bill_print").submit(); 

在我的PHP文件中

if(isset($_POST['jsonLab']))
{
  $lab = json_decode($_POST['jsonLab'],true);
  foreach ($lab as $key => $value) {
    echo $value["test"] . ", " . $value["amount"] . "<br>";
  }   
}

在我使用foreach的方式中似乎存在一些錯誤,或者可能是格式不正確的JSON,它沒有被PHP解碼。 我不想使用AJAX提交。

問題在於這個電話:

.val(jsonLab)

jsonLab是JS中保存的對象數組。 因此,將其設置為jQuery對象的val()將意味着在其上調用toString() 結果是[object Object] 這是發送到您的PHP邏輯的,因此錯誤。

要解決此問題,您需要在將JSON設置為文本字段的值時手動對其進行字符串化:

$('<input type="hidden" name="jsonLab" />').val(JSON.stringify(jsonLab)).appendTo('#bill_print');

另請注意,您可以對#selected_tests tr元素使用單個map()調用,而不是選擇然后推送到顯式實例化的數組:

var jsonLab = $("#selected_tests tr").map(function() {
  return {
    test: $(this).children().eq(0).text(),
    amount: $(this).children().eq(1).text()
  };
}).get();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM