2014-11-25 41 views
0

我的問題是,我想基於起始時間我的陣列看起來像這樣打破一個陣列中的兩個不同的陣列在PHP

Array 
(
    [0] => Array 
     (
      [day_of_weeks] => Monday 
      [start_time] => 6:00 PM 
      [end_time] => 7:00 PM 
     ) 

    [1] => Array 
     (
      [day_of_weeks] => Tuesday 
      [start_time] => 6:00 PM 
      [end_time] => 7:00 PM 
     ) 

    [2] => Array 
     (
      [day_of_weeks] => Wednesday 
      [start_time] => 6:00 PM 
      [end_time] => 7:00 PM 
     ) 

    [3] => Array 
     (
      [day_of_weeks] => Friday 
      [start_time] => 5:00 PM 
      [end_time] => 6:00 PM 
     ) 

    [4] => Array 
     (
      [day_of_weeks] => Saturday 
      [start_time] => 5:00 PM 
      [end_time] => 6:00 PM 
     ) 

    [5] => Array 
     (
      [day_of_weeks] => Sunday 
      [start_time] => 5:00 PM 
      [end_time] => 6:00 PM 
     ) 

) 

像這樣

Array(
    [0] => Array 
    (
     [day_of_weeks] => Monday 
     [day_of_weeks] => Tuesday 
     [day_of_weeks] => Wednesday 
     [start_time] => 6:00 PM 
     [end_time] => 7:00 PM 
    ) 
    [1] => Array 
    (
     [day_of_weeks] => Friday 
     [day_of_weeks] => Saturday 
     [day_of_weeks] => Sunday 
     [start_time] => 5:00 PM 
     [end_time] => 6:00 PM 
    ) 
) 
在打破陣列兩個不同的陣列

並且數據是從數據庫動態傳入的。請幫助我

+0

你到目前爲止莫希特做了什麼? – diEcho 2014-11-25 05:42:58

+0

@diEcho我那麼努力做的,但在端部餘did't得到的結果,我試圖和得到這樣的結果陣列 ( [天] =>數組 ( [0] =>週一 [1] = >星期二 [2] =>星期三 [3] =>星期五 [4] =>星期六 [5] =>週日 ) [START_TIME] =>數組 ( [0] => 11: 00 AM => 11:00 AM [2] => 11:00 AM [3] => 12:00 PM [4] => 12:00 PM [ 5] => 12:00 PM ) ) – 2014-11-25 05:46:48

+4

嗨mohit,你不能有一個像你需要在輸出中一樣的數組。因爲day_of_weeks – 2014-11-25 05:50:01

回答

1

這不是一個完整的解決方案,但可能給你如何進行的一些想法:

$array = array(
    array(
    'day_of_weeks' => 'Monday', 
    'start_time' => '6:00 PM', 
    'end_time' => '7:00 PM' 
), 
    array(
    'day_of_weeks' => 'Tuesday', 
    'start_time' => '6:00 PM', 
    'end_time' => '7:00 PM' 
), 
    array(
    'day_of_weeks' => 'Friday', 
    'start_time' => '5:00 PM', 
    'end_time' => '6:00 PM' 
) 
); 
$result = array(); 

// walk over each element of the original array 
array_walk($array, function(&$item, $key) use (&$result) { 
    // if the key denoted by `start_time` exists append the `day_of_weeks` 
    if(array_key_exists($item['start_time'], $result)) { 
     $result[$item['start_time']]['day_of_weeks'][] = $item['day_of_weeks']; 
    } else { 
     // make `day_of_weeks` an array that can hold more values 
     $result[$item['start_time']] = array(
     'start_time' => $item['start_time'], 
     'end_time' => $item['end_time'], 
     'day_of_weeks' => array($item['day_of_weeks']) 
    ); 
    } 
}); 

// the output of $result would be 
Array 
(
    [6:00 PM] => Array 
    (
     [start_time] => 6:00 PM 
     [end_time] => 7:00 PM 
     [day_of_weeks] => Array 
     (
      [0] => Monday 
      [1] => Tuesday 
     ) 
) 
    [5:00 PM] => Array 
    (
     [start_time] => 5:00 PM 
     [end_time] => 6:00 PM 
     [day_of_weeks] => Array 
     (
      [0] => Friday 
     ) 
) 
) 

也許你應該能夠改變你的MySQL查詢,以獲得所需的輸出。例如運行下表對這個查詢:

SELECT GROUP_CONCAT(day_of_weeks) day_of_weeks, 
     start_time, 
     end_time 
FROM data 
GROUP BY start_time 
ORDER BY start_time DESC; 

+--------------+------------+----------+ 
| day_of_weeks | start_time | end_time | 
+--------------+------------+----------+ 
| Monday  | 6:00 PM | 7:00 PM | 
| Tuesday  | 6:00 PM | 7:00 PM | 
| Wednesday | 6:00 PM | 7:00 PM | 
| Friday  | 5:00 PM | 6:00 PM | 
| Saturday  | 5:00 PM | 6:00 PM | 
| Sunday  | 5:00 PM | 6:00 PM | 
+--------------+------------+----------+ 

上面的例子將返回屬於由,字符分隔同一start_time所有天。請注意,end_time的值並未真正使用,對於前一個使用array_walk()的示例也是如此。

+--------------------------+------------+----------+ 
| day_of_weeks    | start_time | end_time | 
+--------------------------+------------+----------+ 
| Monday,Tuesday,Wednesday | 6:00 PM | 7:00 PM | 
| Friday,Saturday,Sunday | 5:00 PM | 6:00 PM | 
+--------------------------+------------+----------+ 

然後,您可以使用explode()或相似得到的每一天:

foreach($results as $record) { 
    $days = explode(",", $record['day_of_weeks']; 
} 
+1

@MohitJain - 很高興幫助=) – Cyclonecode 2014-11-25 06:31:52

+1

@MohitJain - 不知道它是否會有所幫助,但我添加了一個可以完成這項工作的MySQL解決方案。 – Cyclonecode 2014-11-25 06:43:16

+0

再次感謝sql查詢,但你的代碼是爲我工作..無需修改我的sql查詢 – 2014-11-25 06:52:39

1

首先,因爲你已經寫在你需要的輸出,你不能有多個不同的值day_of_weeks,但是可以使day_of_weeks一個包含日期名稱的數組。

此外,由於它看起來像是在您的輸出中使用了start_timeend_time作爲唯一鍵,所以我建議在數組鍵中使用它們來簡化程序。

所以這給了我們:

$output_array = array(); 
foreach ($input_array as $data_item) { 
    $time_key = $data_item['start_time'] . ' - ' . $data_item['end_time']; 
    if (isset($output_array[$time_key]['day_of_weeks'])) { 
     $output_array[$time_key]['day_of_weeks'][] = $data_item['day_of_weeks']; 
    } else { 
     $output_array[$time_key] = array(
      'day_of_weeks' => array($data_item['day_of_weeks']), 
      'start_time' => $data_item['start_time'], 
      'end_time'  => $data_item['end_time'], 
     ); 
    } 
} 

這將導致:

Array(
    ['6:00 PM - 7:00 PM'] => Array 
    (
     [day_of_weeks] => Array(
      [0] => Monday, 
      [1] => Tuesday, 
      [2] => Wednesday, 
     ), 
     [start_time] => 6:00 PM 
     [end_time] => 7:00 PM 
    ) 
    ['5:00 PM - 6:00 PM'] => Array 
    (
     [day_of_weeks] => Array(
      [0] => Friday, 
      [1] => Saturday, 
      [2] => Sunday, 
     ), 
     [start_time] => 5:00 PM 
     [end_time] => 6:00 PM 
    ) 
) 
+0

你解決方案給我最後的價值的數組,如週三和週日day_of_weeks – 2014-11-25 06:06:33

+0

修改你的代碼後,我幾乎得到了結果,但上面的答案給我整個解決方案 – 2014-11-25 06:29:47