我已经写了应该创建一个数组,看起来像这样的小脚本:意外的通知:未定义指数当空
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
为null引发通知行:“警告:未定义指数工资”。目前,我已经把它添加到代码:
if (!array_key_exists('salary', $vals) || $vals['salary'] === null)
{
if (!array_key_exists('bonus', $vals) || $vals['bonus'] === null)
{
break;
}
$vals['salary'] = 'Does not apply';
}
要得到的结果,我需要。我用google搜索了这个,并且偶然发现了this bug report,这是最后一次修改4年前(2009-05-08),但状态仍然设置为“无反馈”。
有没有其他人遇到类似的小故障/错误?或者我在这里错过了什么?如何在不需要太多if
和函数调用而不需要更改我的设置(E_STRICT | E_ALL
,因为它应该是这样)的情况下避免此问题。
顺便说一句:我在Slackware 14上运行PHP 5.4.7。对于这个小应用程序,我使用了2个Symfony组件(ClassLoader和Console),但是因为这是一个没有任何关系的对象的一部分与Symfony,除了通过UniversalClassLoader
加载,我不认为这是相关的。
由于错误被说成是PDO
相关:是的,我使用的是PDO,但是在另一个类中。
即使我为“salary”和“month”属性指定了一些虚拟值,您的示例代码仍然适用于我。我想知道是否在调用'writeFile()'之前调用'array_fill_with_keys()'没有执行。你可以在'foreach'之前添加'var_dump($ this-> months);'并且共享结果吗? – 2013-05-08 03:40:46
@GeorgeHodgson:当然,它是在循环之前执行的:它在构造函数中。这样,我有一个索引为1-12的空数组,每个索引都拥有一个索引为'month','salary'和'bonus'的数组,它们都被初始化为'null'。换句话说,索引不存在是不可能的,但是,该通知另有说明。 – 2013-05-08 03:43:01
你的帖子只显示了赋值给'$ this-> months',我不知道它是在构造函数中。我现在更加好奇看到var_dump($ this-> months)的结果;' – 2013-05-08 04:11:25