2016-11-08 80 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