如何合并具有相同数据的连续subArrays?

时间:2015-07-12 16:47:09

标签: php arrays multidimensional-array merge associative-array

我有这个数组:

$opening_hours = array(
  'Monday' => array('09:00', '17:00'),
  'Tuesday' => array('09:00', '17:00'),
  'Wednesday' => array('08:00', '13:00'), 
  'Thursday' => array('09:00', '17:00'),
  'Friday' => array('09:00', '17:00'),
  'Saturday' => array('10:00', '16:00'),
  'Sunday' => array('Closed'),
);

我需要以某种方式将这些开放时间合并到数组中,如下所示:

$merged_opening_hours = array(
  'Monday - Tuesday' => array('09:00', '17:00'),
  'Wednesday' => array('08:00', '13:00'),
  'Thursday - Friday' => array('09:00', '17:00'),
  'Saturday' => array('10:00', '16:00');
  'Sunday' => array('Closed'),
);

有什么想法吗?

1 个答案:

答案 0 :(得分:7)

这应该适合你:

所以基本上你只需遍历整个数组并检查下一个元素是否仍然设置并且当前数组与下一个元素相同(这意味着它们具有相同的小时数)。如果是,则执行此操作直到while循环返回false。这是什么代码:

  i.e   hr@gmail.com     decline(1)   scheduled(1)  

        hr1@gmail.com    scheduled(1) 

然后,如果您有多个条目,则可以创建从一个到另一天的范围。这是什么代码:

applicationId

如果您只有相同时间的1天,则只需将其添加到结果数组中即可。这是什么代码:

$DayAmountOfConsecutiveSameHours = 1;
while(isset($arrayKeys[($dayCount+$DayAmountOfConsecutiveSameHours)]) && 
     ($opening_hours[$arrayKeys[$dayCount]] === $opening_hours[$arrayKeys[($dayCount+$DayAmountOfConsecutiveSameHours)]]))
    $DayAmountOfConsecutiveSameHours++;

根据同一时间你跳过下一个数组元素的天数。这是什么代码:

if($DayAmountOfConsecutiveSameHours > 1)
    $result[$arrayKeys[$dayCount] . " - " . $arrayKeys[($dayCount+$DayAmountOfConsecutiveSameHours-1)]] = $opening_hours[$arrayKeys[$dayCount]];

完整代码:

else
    $result[$arrayKeys[$dayCount]] = $opening_hours[$arrayKeys[$dayCount]];

输出:

$dayCount += ($DayAmountOfConsecutiveSameHours - 1);

Demo