2017-02-17 97 views
-1

我有一個這樣的數組:合併相同的數組值

$storeArray = array('Monday' => '08:30 - 16:30', 
        'Tuesday' => '08:30 - 15:30', 
        'Wednesday' => 08:30 - 16:30', 
        'Thursday' => 08:30 - 16:30', 
        'Friday' => 14:30 - 13:30', 
        'Saturday' => 14:30 - 13:30', 
        'Sunday' => 10:00 - 15:30' 
      ); 

現在我想合併所有相同的數組值並打印陣列是這樣的:

Monday - Wednesday - Thursday : 08:30 - 16:30 
Tuesday : 08:30 - 15:30 
Friday - Saturday: 14:30 - 13:30 
Sunday: 10:00 - 15:30 
+1

爲什麼不是週一合併週三週四和?你正在使用的代碼在哪裏? – Ghost

+0

對不起更新的問題 –

+2

非常相似:http://stackoverflow.com/q/31370181 – Rizier123

回答

4

的想法僅僅是組並翻轉它。在對所有的數據進行分組後,重新分配這些值(意味着所有時間),然後翻轉分組數組。

理念:

// group 
$datetime = array(); 
foreach ($storeArray as $day => $time) { 
    $datetime[$time][] = $day; 
} 
// and 
// implode flip 
$datetime = array_flip(array_map(function($e){ 
    return implode(' - ', $e); 
}, $datetime)); 

而且應該產生這樣的:

Array 
(
    [Monday - Wednesday - Thursday] => 08:30 - 16:30 
    [Tuesday] => 08:30 - 15:30 
    [Friday - Saturday] => 14:30 - 13:30 
    [Sunday] => 10:00 - 15:30 
) 

現在,你可以做你的意願。

另一個版本,相同的結果:

// container, total count, counter 
$datetime = array(); $len = count($storeArray); $i = 0; 
foreach ($storeArray as $day => $time) { 
    if (!isset($datetime[$time])) { 
     $datetime[$time] = ''; // initialize 
    } 
    $datetime[$time] .= $day . ' - '; // concatenate dash 
    if ($i == ($len - 1)) { // at the end of the loop, make cosmetic changes, remove extra dash 
     // remove each extra dash, then flip 
     $datetime = array_flip(array_map(function($e){ return rtrim($e, ' - '); }, $datetime)); 
    } 
    $i++; // counter 
} 
+0

謝謝@Ghost。這是完美的 –

+0

星期一 - 星期二 - 星期三 - 星期四 - 星期五:上午11:00 - 晚上10:00。那麼我們可以打印星期一至星期五:上午11:00 - 晚上10:00? @Ghost –

+0

如果相同的值然後使用第一個和最後一個鍵 –