【问题标题】:PHP foreach loop to create JSON from mysqlPHP foreach 循环从 mysql 创建 JSON
【发布时间】:2019-12-15 14:48:50
【问题描述】:

我有一个多对一的问题,我在 mysql 中组织了如下数据:

>order1 : mycustomer : item1    
>order1 : mycustomer : item2    
>order2 : mycustomer : item3    
>order2 : mycustomer : item1    
>order3 : mycustomer : item2    

我想创建类似的 JSON(用于解释目的)

>order1 mycustomer    
>> item1    
>> item2,

>order2 mycustomer  
>> item3    
>> item1,    

>order3 mycustomer    
>> item2

但是我的循环不正确,我没有得到带有项目数组的订单,然后重复下一个订单。我做错了什么。

$query = "SELECT * from `orders` WHERE proc = 'N'";
$result = $conn->query($query);

if ($result->num_rows > 0) {

while($row = $result->fetch_assoc()) {
    $onum = $row['order_number'];

    foreach($result as $results)
    {
        $quantity_invoiced = $row[quantity_invoiced];
        $unit_price = $row[unit_price];
        $item_description = $row['item_description'];

        $itemed = $results['item_description'];
        echo $itemed;
      $tx_data[] = [
      "partnerRef" => $onum,
      "lines" => $itemed
      ];
    }


}
$flagupdate = "UPDATE `orders` SET proc = 'Y' where proc = 'N'";
myqueryi_query($conn, $flagupdate);

} else {
echo "no results";
}

echo json_encode($tx_data);

【问题讨论】:

  • 这段代码充满了难以置信的问题和错误!你试过调试吗?

标签: php mysql json loops for-loop


【解决方案1】:

很少有语法错误和函数名的拼写错误。

  • 不是从结果集中获取索引的正确方法
  • mysqli_query函数名不正确
  • itemed 被包裹在双数组中,而不需要这样做。

这里是更新的代码。

$query = "SELECT * from `orders` WHERE proc = 'N'";
$result = $conn->query($query);
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        $onum = $row['order_number'];
        $socust = $row['salesorder_cust'];

        foreach($result as $results){
            $quantity_invoiced = $row['quantity_invoiced'];
            $unit_price = $row['unit_price'];
            $item_description = $row['item_description'];
            $itemed = $results['item_description'];
            echo $itemed;

            $tx_data[] = [
            "tpRef" => $socust,
            "partnerRef" => $onum,
            "lines" => $itemed
            ];
        }

    }

    $flagupdate = "UPDATE `orders` SET proc = 'Y' where proc = 'N'";
    mysqli_query($conn, $flagupdate);
} else {
    echo "no results";
}
echo json_encode($tx_data);

【讨论】:

  • 嘘...echo json_decode($tx_data); ==> echo json_encode($tx_data); :)
  • 另请注意while($row = $result->fetch_assoc()) { AND foreach($result as $results){ - foreach 循环是不必要的,相反,OP 应该检测当前$row['order_number'] 和前一个之间的变化......而且还有更多问题在代码中(例如:在每次迭代时重写$tx_data
  • 我同意,我的回答是给这个问题的作者一个提示,告诉他如何修复语法和逻辑错误。绝对我的答案可能不是 100% w.r.t 作者的期望
  • Alon 谢谢,我如何覆盖 tx_data?我想在获得属于订单的每个项目的结果并重复时运行循环,我还修复了代码中的语法错误。
  • @NaveedRamzan 感谢您的更新,这将是答案,但数据没有按订单号构建 JSON,它只是为每个项目创建了一个新行,我尝试分组,但我无法获得工作
猜你喜欢
  • 2013-08-20
  • 1970-01-01
  • 2013-06-10
  • 2016-10-25
  • 1970-01-01
  • 1970-01-01
  • 2015-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多