[英]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
)
)
有什么想法嗎?
謝謝。
您在代碼中犯了兩個錯誤。
$k = $item['NDC_Item'];
應該是$k = $item['NDC_Type'];
您正在分解', '
(帶空格的逗號)上的日期。 而您僅用逗號附加新日期。 $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.