Я написал небольшой скрипт, который должен создать массив, который выглядит примерно так:Неожиданное извещение: не определено индекс при нулевой
array(1 => array('month' => 'Jan',
'salary' => '01/31/2013',
'bonus' => '02/15/2013'),
2 => array('month' => '',...));
Вы получаете основную идею: индекс в основном массиве месяцы (численно), каждый из которых содержит массив, который должен быть заполнен динамически. Ключ month
зависит от языка, который запросил пользователь, а также зарплаты и бонуса назначаются даты, когда была выплачена зарплата и/или бонус. Пока ничего не удивляет.
Чтобы получить основную структуру этого массива, я думал, что это было бы проще:
я затем заполнить массив, и все гладко все равно, вплоть до того момента, когда я хочу записать данные в файл, который я сделал так:
private function writeFile()
{
foreach($this->months as $key => $vals)
{
if ($vals['month'] === null)
{//Only filled from date x to date y, some months can be empty
continue;
}
//this seems to raise notices?
if ($vals['salary'] === null)
{
$vals['salary'] = 'Does not apply';
}
fwrite($this->file, implode(',', $vals).PHP_EOL);
}
fclose($this->file);
return $this;
}
линия, где я могу проверить, если salary
является недействительным поднимает уведомления: «Предупреждение: Undefined индекс зарплаты». На данный момент я должен был добавить это к коду:
if (!array_key_exists('salary', $vals) || $vals['salary'] === null)
{
if (!array_key_exists('bonus', $vals) || $vals['bonus'] === null)
{
break;
}
$vals['salary'] = 'Does not apply';
}
Чтобы добраться до результата, мне нужно. Я сделал это в googled и наткнулся на this bug report, который был последний раз изменен 4 года назад (2009-05-08), но статус по-прежнему установлен на «без обратной связи».
Кто-нибудь еще сталкивался с подобным сбоем/ошибкой? Или я чего-то не хватает? Как я могу избежать этой проблемы без необходимости слишком большого количества вызовов if
и функций без, меняя свои настройки (E_STRICT | E_ALL
, как и должно быть).
BTW: Я использую PHP 5.4.7 на Slackware 14. Для этого небольшого приложения я использую 2 компонента Symfony (ClassLoader и Console), но так как это часть объекта, который не имеет ничего общего с Symfony, кроме загрузки через UniversalClassLoader
Я не думаю, что это актуально.
Поскольку ошибка называется PDO
связанной: да, я использую PDO, но в другом классе.
Ваш примерный код выполнен для меня хорошо, даже после того, как я присвоил некоторые фиктивные значения свойствам «зарплата» и «месяц». Интересно, не вызывается вызов 'array_fill_with_keys()' до вызова 'writeFile()'. Можете ли вы добавить 'var_dump ($ this-> months);' перед 'foreach' и поделиться результатами? –
@GeorgeHodgson: Ну, конечно, он выполняется до цикла: он находится в конструкторе. Таким образом, у меня есть пустой массив с индексами 1-12, каждый из которых содержит массив с индексами «месяц», «зарплата» и «бонус», которые все инициализируются «null». Другими словами, невозможно, чтобы индекс _not_ существовал, однако в уведомлении говорится иначе. –
Ваше сообщение только показывало задание '$ this-> months', я не знал, что это было в конструкторе. Мне теперь еще любопытно увидеть результат «var_dump ($ this-> months);' –