2016-11-08 68 views
2

营业时间我有结构化这样的开放时间的阵列:排序在PHP

array:7 [ 
    "mon" => array [ 
    "open" => null 
    "close" => null 
    ] 
    "tue" => array [ 
    "open" => null 
    "close" => null 
    ] 
    "wed" => array [ 
    "open" => "09:00" 
    "close" => "20:00" 
    ] 
    "thu" => array [ 
    "open" => null 
    "close" => null 
    ] 
    "fri" => array [ 
    "open" => "14:00" 
    "close" => "17:00" 
    ] 
    "sat" => array [ 
    "open" => "12:00" 
    "close" => "15:00" 
    ] 
    "sun" => array [ 
    "open" => "12:00" 
    "close" => "15:00" 
    ] 
] 

我想创建这样的结构:

array [ 
    array [ 
     "mon" => array [ 
      "open" => null 
      "close" => null 
     ] 
     "tue" => array [ 
      "open" => null 
      "close" => null 
     ] 
    ] 
    array [ 
     "wed" => array [ 
      "open" => "09:00" 
      "close" => "20:00" 
     ] 
    ] 
    array [ 
     "thu" => array [ 
      "open" => null 
      "close" => null 
     ] 
    ] 
    array [ 
     "fri" => array [ 
      "open" => "14:00" 
      "close" => "17:00" 
     ] 
    ] 
    array [ 
     "sat" => array [ 
      "open" => "12:00" 
      "close" => "15:00" 
     ] 
     "sun" => array [ 
      "open" => "12:00" 
      "close" => "15:00" 
     ] 
    ] 
] 

凡天与同开只要天数连续,小时就会被分组在一起。否则,每一天最终都会结束。

我一直在努力实现这一点在PHP中,这是我到目前为止。

$hours = []; 
$previousDay = null; 

foreach ($days as $key => $day) 
{ 
    if ($day === $previousDay) 
    { 
     $hours[] = array($key => $day); 
    } 
    else 
    { 
     $hours[] = array($key => $day); 
    } 

    $previousDay = $day; 
} 

我被困在如何在同一个阵列中将相同开放时间组合在一起的日子。

回答

1

下面是怎么回事?

$result = array(); 
$previous = null; 
$idx = -1; 
foreach ($days as $key => $day){ 
    if($day !== $previous){ 
     $idx++; 
    } 
    $result[$idx][$key] = $day; 
    $previous = $day; 
} 
+0

正是我需要的,谢谢! – Mala