当数组值相等时,从数组中对项进行分组

时间:2017-02-01 14:49:35

标签: php arrays

我有一个数组,如果某些规格相同,我想将某些项目分组。

这是我的初始数组:

Array (
    [0] => Array (
        [NDC_Date] => 2012-12-12
        [NDC_Type] => Item
        [NDC_Item] => Extra Bed
        [NDC_Rate] => 0.00
        [NDC_Taxes] => 0
        [NDC_TaxesName] => 0
        [NDC_Quantity] => 1
        [NDC_Status] => Charged
    )
    [1] => Array (
        [NDC_Date] => 2013-02-02
        [NDC_Type] => Night
        [NDC_Item] => Night
        [NDC_Rate] => 1000.00
        [NDC_Taxes] => 0
        [NDC_TaxesName] => 0
        [NDC_Quantity] => 10
        [NDC_Status] => Charged
    )
    [2] => Array (
        [NDC_Date] => 2013-02-03
        [NDC_Type] => Night
        [NDC_Item] => Night
        [NDC_Rate] => 1000.00
        [NDC_Taxes] => 0
        [NDC_TaxesName] => 0
        [NDC_Quantity] => 2
        [NDC_Status] => Charged
    )
)

因此,目标是在以下情况下将项目分组到此数组中:

  • NDC_Rate相等
  • NDC_Type相等
  • NDC_Taxes相等
  • NDC_TaxesName相等
  • NDC_Quantity相等
  • NDC_Status相等

所以我应该比较每个项目以了解它。

其实我的代码就是这个。

$result = [];
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;
    }
}
$result = array_values($result);

它没有做任何事情,因为返回的最终数组与我给出的数组相同。

有原因吗?我做错了什么?

感谢您的帮助!

0 个答案:

没有答案