簡體   English   中英

從數組開始,如果日期在PHP中是連續的,則為group元素

[英]From an array, group element if dates are consecutive in PHP

在PHP中,如果每個元素的日期是連續的並且如果

  • NDC_Item
  • NDC_Type
  • NDC_Rate
  • NDC_Taxes
  • NDC_TaxesName
  • NDC_Quantity
  • NDC_Status

相等。


實際上我可以測試的代碼如下:

Array (
    [0] => Array (
        [NDC_Date] => 2017-03-27
        [NDC_Item] => 0
        [NDC_Type] => Night
        [NDC_Rate] => 12.00
        [NDC_Taxes] => 0
        [NDC_TaxesName] => 0
        [NDC_Quantity] => 1
        [NDC_Status] => NotCharged
    )
    [1] => Array (
        [NDC_Date] => 2017-03-28
        [NDC_Item] => 0
        [NDC_Type] => Night
        [NDC_Rate] => 12.00
        [NDC_Taxes] => 0
        [NDC_TaxesName] => 0
        [NDC_Quantity] => 1
        [NDC_Status] => NotCharged
    )
    [2] => Array (
        [NDC_Date] => 2017-03-29
        [NDC_Item] => 0
        [NDC_Type] => Night
        [NDC_Rate] => 12.00
        [NDC_Taxes] => 0
        [NDC_TaxesName] => 0
        [NDC_Quantity] => 1
        [NDC_Status] => NotCharged
    )
    [3] => Array (
        [NDC_Date] => 2017-03-30
        [NDC_Item] => 0
        [NDC_Type] => Night
        [NDC_Rate] => 12.00
        [NDC_Taxes] => 0
        [NDC_TaxesName] => 0
        [NDC_Quantity] => 1
        [NDC_Status] => NotCharged
    )
    [4] => Array (
        [NDC_Date] => 2017-03-31
        [NDC_Item] => 0
        [NDC_Type] => Night
        [NDC_Rate] => 12.00
        [NDC_Taxes] => 0
        [NDC_TaxesName] => 0
        [NDC_Quantity] => 1
        [NDC_Status] => NotCharged
    )
    [5] => Array (
        [NDC_Date] => 2017-04-01
        [NDC_Item] => 0
        [NDC_Type] => Night
        [NDC_Rate] => 12.00
        [NDC_Taxes] => 0
        [NDC_TaxesName] => 0
        [NDC_Quantity] => 1
        [NDC_Status] => NotCharged
    )
    [6] => Array (
        [NDC_Date] => 2017-04-02
        [NDC_Item] => 0
        [NDC_Type] => Night
        [NDC_Rate] => 12.00
        [NDC_Taxes] => 0
        [NDC_TaxesName] => 0
        [NDC_Quantity] => 1
        [NDC_Status] => NotCharged
    )
    [7] => Array (
        [NDC_Date] => 2017-04-03
        [NDC_Item] => 0
        [NDC_Type] => Night
        [NDC_Rate] => 12.00
        [NDC_Taxes] => 0
        [NDC_TaxesName] => 0
        [NDC_Quantity] => 1
        [NDC_Status] => NotCharged
    )
)

它是一個包含客戶預訂數據的數組。


foreach ($array as $item) {
    $k = $item['NDC_Item'];

    if (!isset($result[$k])) {
        $result[$k] = $item;
    } elseif (
        ($i = $result[$k]) && 
        $item['NDC_Rate'] === $i['NDC_Rate'] && 
        $item['NDC_Type'] === $i['NDC_Type'] && 
        $item['NDC_Taxes'] === $i['NDC_Taxes'] && 
        $item['NDC_TaxesName'] === $i['NDC_TaxesName'] && 
        $item['NDC_Quantity'] === $i['NDC_Quantity'] &&
        $item['NDC_Status']=== $i['NDC_Status'] 
    ) {
        $current_dates = explode(', ', $result[$k]['NDC_Date']);
        $last_date = end($current_dates);
        if(date('Y-m-d', strtotime("{$last_date} +1 day")) === $item['NDC_Date']) {
            $result[$k]['NDC_Id'] .= ','. $item['NDC_Id'];
            $result[$k]['NDC_Date'] .= ','. $item['NDC_Date'];
        } else {
            $result[$k. microtime()] = $item;
        }
    } else {
        $result[$k. microtime()] = $item;
    }
}

問題是:實際上,先前的代碼合並了前兩個元素(即:2017-03-27和2017-03-28被分組),但是沒有合並2017-03-29、2017-03-30,...,而這是連續的...


預期結果應為:

Array (
    [Night] => Array (
        [NDC_Date] => 2017-03-27,2017-03-28,2017-03-29,2017-03-30,2017-03-31,2017-04-01,2017-04-02,2017-04-03
        [NDC_Item] => 0
        [NDC_Type] => Night
        [NDC_Rate] => 12.00
        [NDC_Taxes] => 0
        [NDC_TaxesName] => 0
        [NDC_Quantity] => 1
        [NDC_Status] => NotCharged
    )
)

有什么想法嗎?

謝謝。

您在代碼中犯了兩個錯誤。

  1. $k = $item['NDC_Item']; 應該是$k = $item['NDC_Type'];

  2. 您正在分解', ' (帶空格的逗號)上的日期。 而您僅用逗號附加新日期。 $current_dates = explode(', ', $result[$k]['NDC_Date']); $result[$k]['NDC_Date'] .= ','. $item['NDC_Date']; $result[$k]['NDC_Date'] .= ','. $item['NDC_Date'];

觀看這個現場演示

暫無
暫無

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

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