【问题标题】:order php associative nested array by date key按日期键排序php关联嵌套数组
【发布时间】:2021-01-11 21:41:28
【问题描述】:

我想按升序排列这个关联数组的每个 [dataPartenza] 中的日期,我找到了很多关于索引数组的答案,但没有类似的东西。这里的问题是日期不是数组的值,而是键本身,所以我不能应用我在其他答案中找到的 usort 方法。

PHP:

[destinazione] => Array(
[Corfù] => Array(
  [dataPartenza] => Array(
    [2021 - 07 - 16] => Array(
      [soldout] => [sistemazione] => Array(
        [basic] => Array(
          [00 | quota base] => Array(
            [capienza] => N / S[prezzo] => 365.00
          )[01 | supplemento monolocale] => Array(
            [capienza] => 2[prezzo] => 50.00
          )
        )[comfort] => Array(
          [00 | quota base] => Array(
            [capienza] => N / S[prezzo] => 395.00
          )[01 | supplemento monolocale] => Array(
            [capienza] => 2[prezzo] => 60.00
          )
        )
      )
    )[2021 - 07 - 23] => Array(
      [soldout] => [sistemazione] => Array(
        [basic] => Array(
          [00 | quota base] => Array(
            [capienza] => N / S[prezzo] => 365.00
          )[01 | supplemento monolocale] => Array(
            [capienza] => 2[prezzo] => 50.00
          )
        )[comfort] => Array(
          [00 | quota base] => Array(
            [capienza] => N / S[prezzo] => 395.00
          )[01 | supplemento monolocale] => Array(
            [capienza] => 2[prezzo] => 60.00
          )
        )
      )
    )[2021 - 08 - 06] => Array(
      [soldout] => [sistemazione] => Array(
        [basic] => Array(
          [00 | quota base] => Array(
            [capienza] => N / S[prezzo] => 365.00
          )[01 | supplemento monolocale] => Array(
            [capienza] => N / S[prezzo] => 50.00
          )
        )[comfort] => Array(
          [00 | quota base] => Array(
            [capienza] => N / S[prezzo] => 385.00
          )[01 | supplemento monolocale] => Array(
            [capienza] => 2[prezzo] => 60.00
          )
        )
      )
    )
  )
)[Zante] => Array(
  [dataPartenza] => Array(
    [2021 - 07 - 17] => Array(
      [soldout] => [sistemazione] => Array(
        [basic] => Array(
          [00 | quota base] => Array(
            [capienza] => 5[prezzo] => 395.00
          )[01 | bilocale] => Array(
            [capienza] => 4[prezzo] => 415.00
          )[02 | studios] => Array(
            [capienza] => 3[prezzo] => 405.00
          )[03 | studios] => Array(
            [capienza] => 2[prezzo] => 425.00
          )
        )
      )
    )[2021 - 07 - 24] => Array(
      [soldout] => [sistemazione] => Array(
        [basic] => Array(
          [00 | quota base] => Array(
            [capienza] => N / S[prezzo] => 395.00
          )[01 | bilocale] => Array(
            [capienza] => 4[prezzo] => 425.00
          )[02 | studio] => Array(
            [capienza] => 3[prezzo] => 415.00
          )[03 | studio] => Array(
            [capienza] => 2[prezzo] => 445.00
          )
        )
      )
    )[2021 - 07 - 31] => Array(
      [soldout] => [sistemazione] => Array(
        [basic] => Array(
          [00 | quota base] => Array(
            [capienza] => N / S[prezzo] => 395.00
          )[01 | bilocale] => Array(
            [capienza] => 4[prezzo] => 425.00
          )[02 | studio] => Array(
            [capienza] => 3[prezzo] => 415.00
          )[03 | studio] => Array(
            [capienza] => 3[prezzo] => 445.00
          )
        )
      )
    )
  )
)[Pag] => Array(
  [dataPartenza] => Array(
    [2021 - 07 - 18] => Array(
      [soldout] => [sistemazione] => Array(
        [basic] => Array(
          [00 | quota base] => Array(
            [capienza] => N / S[prezzo] => 274.00
          )[01 | supplemento monolocale] => Array(
            [capienza] => 3[prezzo] => 30.00
          )[02 | supplemento monolocale] => Array(
            [capienza] => 2[prezzo] => 50.00
          )
        )
      )
    )[2021 - 07 - 25] => Array(
      [soldout] => [sistemazione] => Array(
        [basic] => Array(
          [00 | quota base] => Array(
            [capienza] => N / S[prezzo] => 274.00
          )[01 | supplemento monolocale] => Array(
            [capienza] => 3[prezzo] => 30.00
          )[02 | supplemento monolocale] => Array(
            [capienza] => 2[prezzo] => 50.00
          )
        )
      )
    )[2021 - 08 - 01] => Array(
      [soldout] => [sistemazione] => Array(
        [basic] => Array(
          [00 | quota base] => Array(
            [capienza] => N / S[prezzo] => 274.00
          )[01 | supplemento monolocale] => Array(
            [capienza] => 3[prezzo] => 30.00
          )[02 | supplemento monolocale] => Array(
            [capienza] => 2[prezzo] => 50.00
          )
        )
      )
    )
  )
)
))

按照建议,我也添加了一个更紧凑的 json_encode 版本

JSON:

    {
       "destinazione":{
          "Corfù":{
             "dataPartenza":{
                "2021-07-16":{
                   "soldout":false,
                   "sistemazione":{
                      "basic":{
                         "00|quota base":{
                            "capienza":"N/S",
                            "prezzo":"365.00"
                         },
                         "01|supplemento monolocale":{
                            "capienza":"2",
                            "prezzo":"50.00"
                         }
                      },
                      "comfort":{
                         "00|quota base":{
                            "capienza":"N/S",
                            "prezzo":"395.00"
                         },
                         "01|supplemento monolocale":{
                            "capienza":"2",
                            "prezzo":"60.00"
                         }
                      }
                   }
                },
                "2021-07-23":{
                   "soldout":false,
                   "sistemazione":{
                      "basic":{
                         "00|quota base":{
                            "capienza":"N/S",
                            "prezzo":"365.00"
                         },
                         "01|supplemento monolocale":{
                            "capienza":"2",
                            "prezzo":"50.00"
                         }
                      },
                      "comfort":{
                         "00|quota base":{
                            "capienza":"N/S",
                            "prezzo":"395.00"
                         },
                         "01|supplemento monolocale":{
                            "capienza":"2",
                            "prezzo":"60.00"
                         }
                      }
                   }
                },
                "2021-08-06":{
                   "soldout":false,
                   "sistemazione":{
                      "basic":{
                         "00|quota base":{
                            "capienza":"N/S",
                            "prezzo":"365.00"
                         },
                         "01|supplemento monolocale":{
                            "capienza":"N/S",
                            "prezzo":"50.00"
                         }
                      },
                      "comfort":{
                         "00|quota base":{
                            "capienza":"N/S",
                            "prezzo":"385.00"
                         },
                         "01|supplemento monolocale":{
                            "capienza":"2",
                            "prezzo":"60.00"
                         }
                      }
                   }
                }
             }
          },
          "Zante":{
             "dataPartenza":{
                "2021-07-17":{
                   "soldout":false,
                   "sistemazione":{
                      "basic":{
                         "00|quota base":{
                            "capienza":"5",
                            "prezzo":"395.00"
                         },
                         "01|bilocale":{
                            "capienza":"4",
                            "prezzo":"415.00"
                         },
                         "02|studios":{
                            "capienza":"3",
                            "prezzo":"405.00"
                         },
                         "03|studios":{
                            "capienza":"2",
                            "prezzo":"425.00"
                         }
                      }
                   }
                },
                "2021-07-24":{
                   "soldout":false,
                   "sistemazione":{
                      "basic":{
                         "00|quota base":{
                            "capienza":"N/S",
                            "prezzo":"395.00"
                         },
                         "01|bilocale ":{
                            "capienza":"4",
                            "prezzo":"425.00"
                         },
                         "02|studio":{
                            "capienza":"3",
                            "prezzo":"415.00"
                         },
                         "03|studio":{
                            "capienza":"2",
                            "prezzo":"445.00"
                         }
                      }
                   }
                },
                "2021-07-31":{
                   "soldout":false,
                   "sistemazione":{
                      "basic":{
                         "00|quota base":{
                            "capienza":"N/S",
                            "prezzo":"395.00"
                         },
                         "01|bilocale":{
                            "capienza":"4",
                            "prezzo":"425.00"
                         },
                         "02|studio":{
                            "capienza":"3",
                            "prezzo":"415.00"
                         },
                         "03|studio":{
                            "capienza":"3",
                            "prezzo":"445.00"
                         }
                      }
                   }
                }
             }
          },
          "Pag":{
             "dataPartenza":{
                "2021-07-18":{
                   "soldout":false,
                   "sistemazione":{
                      "basic":{
                         "00|quota base":{
                            "capienza":"N/S",
                            "prezzo":"274.00"
                         },
                         "01|supplemento monolocale":{
                            "capienza":"3",
                            "prezzo":"30.00"
                         },
                         "02|supplemento monolocale":{
                            "capienza":"2",
                            "prezzo":"50.00"
                         }
                      }
                   }
                },
                "2021-07-25":{
                   "soldout":false,
                   "sistemazione":{
                      "basic":{
                         "00|quota base":{
                            "capienza":"N/S",
                            "prezzo":"274.00"
                         },
                         "01|supplemento monolocale":{
                            "capienza":"3",
                            "prezzo":"30.00"
                         },
                         "02|supplemento monolocale":{
                            "capienza":"2",
                            "prezzo":"50.00"
                         }
                      }
                   }
                },
                "2021-08-01":{
                   "soldout":false,
                   "sistemazione":{
                      "basic":{
                         "00|quota base":{
                            "capienza":"N/S",
                            "prezzo":"274.00"
                         },
                         "01|supplemento monolocale":{
                            "capienza":"3",
                            "prezzo":"30.00"
                         },
                         "02|supplemento monolocale":{
                            "capienza":"2",
                            "prezzo":"50.00"
                         }
                      }
                   }
                }
             }
          }
       }
    }

I'm putting here the snippet for the solution provided by @Anton this is working perfectly with usort and regular sort flag for yyyy-mm-dd formatted value:

**PHP:**
```php
<?php
    $data = '{"destinazione":{"Corfù":{"dataPartenza":{"2021-07-24":{"soldout":false,"sistemazione":{"basic":{"00|quota base":{"capienza":"N/S","prezzo":"365.00"},"01|supplemento monolocale":{"capienza":"2","prezzo":"50.00"}},"comfort":{"00|quota base":{"capienza":"N/S","prezzo":"395.00"},"01|supplemento monolocale":{"capienza":"2","prezzo":"60.00"}}}},"2021-07-23":{"soldout":false,"sistemazione":{"basic":{"00|quota base":{"capienza":"N/S","prezzo":"365.00"},"01|supplemento monolocale":{"capienza":"2","prezzo":"50.00"}},"comfort":{"00|quota base":{"capienza":"N/S","prezzo":"395.00"},"01|supplemento monolocale":{"capienza":"2","prezzo":"60.00"}}}},"2021-01-06":{"soldout":false,"sistemazione":{"basic":{"00|quota base":{"capienza":"N/S","prezzo":"365.00"},"01|supplemento monolocale":{"capienza":"N/S","prezzo":"50.00"}},"comfort":{"00|quota base":{"capienza":"N/S","prezzo":"385.00"},"01|supplemento monolocale":{"capienza":"2","prezzo":"60.00"}}}}}},"Zante":{"dataPartenza":{"2021-07-17":{"soldout":false,"sistemazione":{"basic":{"00|quota base":{"capienza":"5","prezzo":"395.00"},"01|bilocale":{"capienza":"4","prezzo":"415.00"},"02|studios":{"capienza":"3","prezzo":"405.00"},"03|studios":{"capienza":"2","prezzo":"425.00"}}}},"2021-07-24":{"soldout":false,"sistemazione":{"basic":{"00|quota base":{"capienza":"N/S","prezzo":"395.00"},"01|bilocale ":{"capienza":"4","prezzo":"425.00"},"02|studio":{"capienza":"3","prezzo":"415.00"},"03|studio":{"capienza":"2","prezzo":"445.00"}}}},"2021-07-31":{"soldout":false,"sistemazione":{"basic":{"00|quota base":{"capienza":"N/S","prezzo":"395.00"},"01|bilocale":{"capienza":"4","prezzo":"425.00"},"02|studio":{"capienza":"3","prezzo":"415.00"},"03|studio":{"capienza":"3","prezzo":"445.00"}}}}}},"Pag":{"dataPartenza":{"2021-07-18":{"soldout":false,"sistemazione":{"basic":{"00|quota base":{"capienza":"N/S","prezzo":"274.00"},"01|supplemento monolocale":{"capienza":"3","prezzo":"30.00"},"02|supplemento monolocale":{"capienza":"2","prezzo":"50.00"}}}},"2021-08-01":{"soldout":false,"sistemazione":{"basic":{"00|quota base":{"capienza":"N/S","prezzo":"274.00"},"01|supplemento monolocale":{"capienza":"3","prezzo":"30.00"},"02|supplemento monolocale":{"capienza":"2","prezzo":"50.00"}}}}}}}}';
    $input = json_decode($data, true);
    
    $output = $input;
    foreach ($input['destinazione'] as $city_name => $city_data) {
        $dataPartenza = $city_data['dataPartenza'];
        ksort($dataPartenza);
        $output['destinazione'][$city_name]['dataPartenza'] = $dataPartenza;
    }
    
    echo "\n\nOUTPUT: " . json_encode($output);

编辑:以更易读的格式清除数组并添加 json 版本

【问题讨论】:

  • 您的示例中的数组不可读。例如使用json_encode 使其更紧凑
  • @Anton 我也加了一个json版本
  • @silvered.dragon 很好,现在我们可以看到您的日期已经按升序排列。为什么还要再排序一次?
  • @Anton 这个 json 来自一个可以随时间增长的动态可扩展形式。所以现在被订购了,因为我刚刚以这种 asc 方式自己填写了表格。如果我要添加更多日期,我希望它们按升序排列。

标签: php arrays usort array-multisort


【解决方案1】:

答案已在 cmets 中:ksort。以下是示例:click

所以我取数组,对它进行排序,放回结果:

// get 'dataPartenza'
$dataPartenza = $city_data['dataPartenza'];
// sort it
ksort($dataPartenza);
// put to result
$output['destinazione'][$city_name]['dataPartenza'] = $dataPartenza;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多