簡體   English   中英

PHP Group PDO 或 JSON 結果按 3 個字段和輸出

[英]PHP Group PDO or JSON results by 3 fields and output

我正在嘗試按 3 個字段 delivery_date、van_no 和 drop_no 將我的結果分組到一個數組中,這是我到目前為止所擁有的:

// Gets all orders and sorts by delivery date, van and drop number
    $getorders = $conn->prepare("SELECT * FROM orders INNER JOIN customers ON orders.customer_id = customers.customer_id INNER JOIN addresses on orders.address_id = addresses.address_id ORDER BY delivery_date, van_no, drop_no");
    $getorders->execute();

    $result = $getorders->fetchAll(\PDO::FETCH_ASSOC);    

    var_dump($result);

這給了我一個輸出,如:

array (size=6)
  0 => 
    array (size=8)
      'orders_id' => string '6' (length=1)
      'customer_id' => string '1' (length=1)
      'address_id' => string '1' (length=1)
      'van_no' => string '1' (length=1)
      'drop_no' => string '0' (length=1)
      'delivery_date' => string '2020-08-25' (length=10)
      'customer_name' => string 'One' (length=3)
      'address_postcode' => string 'b1' (length=2)
  1 => 
    array (size=8)
      'orders_id' => string '1' (length=1)
      'customer_id' => string '1' (length=1)
      'address_id' => string '1' (length=1)
      'van_no' => string '1' (length=1)
      'drop_no' => string '1' (length=1)
      'delivery_date' => string '2020-08-25' (length=10)
      'customer_name' => string 'One' (length=3)
      'address_postcode' => string 'b1' (length=2)
  2 => 
    array (size=8)
      'orders_id' => string '3' (length=1)
      'customer_id' => string '2' (length=1)
      'address_id' => string '2' (length=1)
      'van_no' => string '1' (length=1)
      'drop_no' => string '2' (length=1)
      'delivery_date' => string '2020-08-25' (length=10)
      'customer_name' => string 'Two' (length=3)
      'address_postcode' => string 'b2' (length=2)

如果我將其更改為 \\PDO::FETCH_GROUP 它似乎只是將每個數組的每個字段加倍,如果我在查詢中使用 GROUP BY,它只會為每個字段提供一個結果。 我試過了:

 foreach($data->delivery_date as $values)
 {
      echo $values->van_no . "\n";
 }

但只是得到注意:試圖獲得非對象的屬性“delivery_date”,我嘗試過編碼為 JSON 但卡住了,並試圖在同一個地方進行分組。

基本上我現在完全迷失了,我圍繞分組 PDO 數組或 JSON 數組搜索的所有內容最終都沒有做任何事情或拋出像上面那樣的錯誤。

編輯:

我希望輸出至少看起來像這樣:

[
    "delivery_date": "2020-08-25"
    {
        "van_no": "1"
            {
                "orders_id": "6",
                "customer_id": "1",
                "address_id": "1",
                "van_no": "1",
                "drop_no": "0",
                "delivery_date": "2020-08-25",
                "customer_name": "One",
                "address_postcode": "b1"
            },
            {
                "orders_id": "1",
                "customer_id": "1",
                "address_id": "1",
                "van_no": "1",
                "drop_no": "1",
                "delivery_date": "2020-08-25",
                "customer_name": "One",
                "address_postcode": "b1"
            },
            {
                "orders_id": "3",
                "customer_id": "2",
                "address_id": "2",
                "van_no": "1",
                "drop_no": "2",
                "delivery_date": "2020-08-25",
                "customer_name": "Two",
                "address_postcode": "b2"
            }

    }

輸出...

"delivery_date": "2020-08-25"
    {

無法實現,因此此代碼將創建輸出,其中包含送貨和貨車列表...

$output = [];
while( $result = $getorders->fetch(\PDO::FETCH_ASSOC))  {
    if ( !isset($output[$result['delivery_date']]) )    {
        $output[$result['delivery_date']]['date'] = $result['delivery_date'];
    }
    if ( !isset($output[$result['delivery_date']][$result['van_no']]) ) {
        $output[$result['delivery_date']][$result['van_no']]['van'] 
            = $result['van_no'];
    }
    $output[$result['delivery_date']]
            [$result['van_no']][] = $result;
}
echo json_encode(array_values($output), JSON_PRETTY_PRINT);

這會給你類似的東西......

[
    {
        "date": "2020-08-25",
        "1": {
            "van": 1,
            "0": {
                "delivery_date": "2020-08-25",
                "van_no": 1,

暫無
暫無

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

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