2015-11-06 70 views
1

這是關於填充給定年份的假期(而不是如何計算它們)的數組,以便隨後輕鬆訪問它們。我的方法是使用假期的時間戳作爲關鍵字。如何用假期填充數組?

$year = 2015; 
$holidays = array(
    strtotime($year . '-01-01') => array(
     'holiday' => 'New Year', 
     'comment' => 'Happy New Year!' 
    ), 
    strtotime($year . '-04-05') => array(
     'holiday' => 'Easter', 
     'comment' => 'Happy Easter!' 
    ), 
    strtotime($year . '-12-25') => array(
     'holiday' => 'Christmas', 
     'comment' => 'Merry Christmas!' 
    ) 
    . 
    . 
    . 
); 

這工作得很好,直到有一個每天在同一時間超過一個節日,例如2015年12月6日(聖尼古拉斯節,第一次降臨)。在這種情況下,已經定義的鍵後面的值被覆蓋。所以需要另一個數組級別。

$year = 2015; 
$holidays = array(); 
$holidays[strtotime($year . '-01-01')][] => array(
     'holiday' => 'New Year', 
     'comment' => 'Happy New Year!' 
); 
$holidays[strtotime($year . '-04-05')][] => array(
     'holiday' => 'Easter', 
     'comment' => 'Happy Easter!' 
); 
$holidays[strtotime($year . '-12-25')][] => array(
     'holiday' => 'Christmas', 
     'comment' => 'Merry Christmas!' 
); 
$holidays[strtotime($year . '-12-06')][] => array(
     'holiday' => 'St Nicholas\' Day', 
     'comment' => 'Make sure to turn out your boots!' 
); 
$holidays[strtotime($year . '-12-06')][] => array(
     'holiday' => 'First Advent', 
     'comment' => 'Remember to light the first candle on your Advent wreath!' 
); 
. 
. 
. 
); 

可這陣填充中的「一條線」來完成(注意;)作爲我的第一個例子嗎?你有沒有比我的方法更聰明的想法?

+0

作爲節日可能會因文化,宗教的變化和國家,也許使用圖書館是一個更好的主意。或者你可以有一個數組來聲明每個節假日的細節,並使用'foreach'循環來填充'$ holiday'數組 – Andrew

+0

你建議使用哪個庫?你能否詳細解釋你的第二種方法,因爲我真的不明白嗎? – Ben

+0

我不能推薦任何圖書館,因爲我還沒有嘗試過自己,但谷歌顯示我在第一頁https://github.com/michalmanko/php-library-holiday – Andrew

回答

1

我會使用一個普通的0索引數組,然後在數組中爲該時間的假期創建另一個字段。

$year = 2015; 
$holidays = array(); 
$holidays[] => array(
     'holiday' => 'New Year', 
     'comment' => 'Happy New Year!', 
     'time' => strtotime($year . '-01-01') 
); 
$holidays[] => array(
     'holiday' => 'Easter', 
     'comment' => 'Happy Easter!', 
     'time' => strtotime($year . '-04-05'), 
); 

... 

然後,如果我需要排序它,我會使用PHP數組排序函數。

至於做這一切在一個聲明中,你可以做這樣的事情:

$holidays = array(
    strtotime($year . '-04-05') => array(
     array(
      'holiday' => 'Easter', 
      'comment' => 'Happy Easter!', 
     ), 
     array(
      'holiday' => 'Christmas', 
      'comment' => 'Merry Christmas!' 
     ), 
    ), 
); 

只需添加更多的陣列所有德一路下跌......

+0

當然,我也想到了這種方法,但它似乎要難得多,速度慢(隨着性能下降)才能獲得假期。例如,在打印日曆時,如果循環中的當前日期是假日,則需要檢查。如果假期的時間戳是關鍵字,則只需檢查當前日期的時間戳是否設置在假日數組中:'$ currentDate = strtotime('today'); echo isset($ holidays [$ currentDate])? $ holidays [$ currentDate]:'';'否則你需要在每一天循環訪問數組,不是嗎? – Ben

+0

你是指什麼排序功能?你會如何做到這一點? – Ben

+0

對不起,這裏是數組的排序功能:http://php.net/manual/en/array.sorting.php – Kirkland