PHP « Формирование массива в цикле и Notice: Undefined offset: 0

Здравствуйте. Существует следующий код:
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .php.geshi_code {font-family:monospace;} .php.geshi_code .imp {font-weight: bold; color: red;} .php.geshi_code .kw1 {color: #b1b100;} .php.geshi_code .kw2 {color: #000000; font-weight: bold;} .php.geshi_code .kw3 {color: #990000;} .php.geshi_code .co1 {color: #666666; font-style: italic;} .php.geshi_code .co2 {color: #666666; font-style: italic;} .php.geshi_code .co3 {color: #0000cc; font-style: italic;} .php.geshi_code .co4 {color: #009933; font-style: italic;} .php.geshi_code .coMULTI {color: #666666; font-style: italic;} .php.geshi_code .es0 {color: #000099; font-weight: bold;} .php.geshi_code .es1 {color: #000099; font-weight: bold;} .php.geshi_code .es2 {color: #660099; font-weight: bold;} .php.geshi_code .es3 {color: #660099; font-weight: bold;} .php.geshi_code .es4 {color: #006699; font-weight: bold;} .php.geshi_code .es5 {color: #006699; font-weight: bold; font-style: italic;} .php.geshi_code .es6 {color: #009933; font-weight: bold;} .php.geshi_code .es_h {color: #000099; font-weight: bold;} .php.geshi_code .br0 {color: #009900;} .php.geshi_code .sy0 {color: #339933;} .php.geshi_code .sy1 {color: #000000; font-weight: bold;} .php.geshi_code .st0 {color: #0000ff;} .php.geshi_code .st_h {color: #0000ff;} .php.geshi_code .nu0 {color: #cc66cc;} .php.geshi_code .nu8 {color: #208080;} .php.geshi_code .nu12 {color: #208080;} .php.geshi_code .nu19 {color:#800080;} .php.geshi_code .me1 {color: #004000;} .php.geshi_code .me2 {color: #004000;} .php.geshi_code .re0 {color: #000088;} .php.geshi_code span.xtra { display:block; }
$off_day = array();
foreach($_POST['Shops']['office_days_process'] as $day_k => $day_arr) {
         foreach($day_arr as $day_key => $day_val) {
                      if($day_val != '') {
                              if($day_k != 0) {
                                   $off_day[$day_key]['days'] .= ',';
                               }
                              $off_day[$day_key]['days'] .= $day_val;
                      }
          }
}

Суть в том, что строка
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .php.geshi_code {font-family:monospace;} .php.geshi_code .imp {font-weight: bold; color: red;} .php.geshi_code .kw1 {color: #b1b100;} .php.geshi_code .kw2 {color: #000000; font-weight: bold;} .php.geshi_code .kw3 {color: #990000;} .php.geshi_code .co1 {color: #666666; font-style: italic;} .php.geshi_code .co2 {color: #666666; font-style: italic;} .php.geshi_code .co3 {color: #0000cc; font-style: italic;} .php.geshi_code .co4 {color: #009933; font-style: italic;} .php.geshi_code .coMULTI {color: #666666; font-style: italic;} .php.geshi_code .es0 {color: #000099; font-weight: bold;} .php.geshi_code .es1 {color: #000099; font-weight: bold;} .php.geshi_code .es2 {color: #660099; font-weight: bold;} .php.geshi_code .es3 {color: #660099; font-weight: bold;} .php.geshi_code .es4 {color: #006699; font-weight: bold;} .php.geshi_code .es5 {color: #006699; font-weight: bold; font-style: italic;} .php.geshi_code .es6 {color: #009933; font-weight: bold;} .php.geshi_code .es_h {color: #000099; font-weight: bold;} .php.geshi_code .br0 {color: #009900;} .php.geshi_code .sy0 {color: #339933;} .php.geshi_code .sy1 {color: #000000; font-weight: bold;} .php.geshi_code .st0 {color: #0000ff;} .php.geshi_code .st_h {color: #0000ff;} .php.geshi_code .nu0 {color: #cc66cc;} .php.geshi_code .nu8 {color: #208080;} .php.geshi_code .nu12 {color: #208080;} .php.geshi_code .nu19 {color:#800080;} .php.geshi_code .me1 {color: #004000;} .php.geshi_code .me2 {color: #004000;} .php.geshi_code .re0 {color: #000088;} .php.geshi_code span.xtra { display:block; }
$off_day[$day_key]['days'] .= $day_val;

Возвращает ошибку: Notice: Undefined offset: 0
Т.е. сообщает о том, что в массиве $off_day не существует значения с ключом "0", и это естественно т.к. массив формируется динамически в цикле.

И из этого следует вопрос: каким образом можно сформировать данный массив чтобы избежать появления данного уведомления?
P.S.
Не предлагать: @ (подавление ошибки), перенастроить сервер.

1 ответов


foreach($day_arr as $day_key => $day_val) {
$day_key выставляется в 0
if($day_k != 0) {
условие пропускается, потому что $day_k тоже 0
$off_day[$day_key]['days'] .= $day_val;
та-да! Код пытается получить элемент 0 массива $off_day, которого просто не существует. Решается это просто:
foreach($day_arr as $day_key => $day_val) {
                      $off_day[$day_key] = array('days' => '',) // инициализировать строку нужно для того, чтобы не получить аналогичные ошибки при нижеследующих операторах конкатенации
                      if($day_val != '') {
                              if($day_k != 0) {
                                   $off_day[$day_key]['days'] .= ',';
                               }
                              $off_day[$day_key]['days'] .= $day_val;
                      }
          }

p.s. форматируйте код по-человечески, глаза сломать можно, зачем мешать табы с пробелами и выставлять скобки на разной отбивке?