Как заполнить массив праздниками?

Речь идет о заполнении массива праздничными днями для определенного года (а не о том, как их рассчитать), чтобы впоследствии легко получить к ним доступ. Мой подход заключается в использовании меток времени праздников в качестве ключей.

$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!'
)
.
.
.
);

Это работает нормально до тех пор, пока в один и тот же день не будет более одного праздника, например 6 декабря 2015 г. (День Святого Николая, Первое пришествие). В этом случае значение за уже определенным ключом перезаписывается. Так что нужен еще один уровень массива.

$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!'
);
.
.
.
);

Может ли заполнение этого массива быть выполнено в «одну строку» (обратите внимание на ;) как в моем первом примере? У вас есть другие (более умные) идеи, чем мой подход?

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!'
),
),
);

Просто добавьте больше массивов вниз …

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]