我通过ajax将以下Json发送到test.php:
[{},{"product[]":"john","qty[]":"12","price[]":"100","total[]":"1200"},{"product[]":"juan","qty[]":"22","price[]":"3.5","total[]":"77"},{"product[]":"louis","qty[]":"99","price[]":"1.22","total[]":"120.78"},{"product[]":"paul","qty[]":"5","price[]":"2.1","total[]":"10.5"},{"product[]":"carl","qty[]":"9","price[]":"14","total[]":"126"},{"total_amount":"1533.00"}]
在我的php文件中,我试图遍历每个单独的产品[],数量[],价格[]和列表值:
<?php
$obj = json_decode($_POST["mydata"]);
header('Content-Type: application/json');
// echo json_encode($obj[1]->{'product[]'}); //(works)
foreach($obj as $item) {
echo $item['product[]'].'<br>';
echo $item['price[]'].'<br>';
echo $item['qty[]'].'<br>';
echo $item['total[]'].'<br>';
}
?>
但这会引发错误。 我的循环出了什么问题?
答案 0 :(得分:1)
该代码有几处错误,首先是您将其解码为对象,然后尝试将其用作数组。您需要将true
作为第二个参数传递给json_decode()
,以使其成为关联数组。
第二个是您的数组包含的元素没有全部详细信息。最后一个元素只有"total_amount"
,因此没有其他字段存在。这就是为什么我使用
if ( isset($item['product[]'])){
在输出数据之前检查对象...
$obj = json_decode($_POST["mydata"], true);
header('Content-Type: application/json');
foreach($obj as $item) {
if ( isset($item['product[]'])){
echo $item['product[]'].'<br>';
echo $item['price[]'].'<br>';
echo $item['qty[]'].'<br>';
echo $item['total[]'].'<br>';
}
}
答案 1 :(得分:0)
将true
作为第二个参数传递给json_decode
。
根据文档:
关联
为TRUE时,返回的对象将转换为关联数组。
因此您的代码变为:
$obj = json_decode($_POST["mydata"], true);
还请注意,数组中的第一个条目为空,因此您必须进行检查。