我已經寫了應該創建一個數組,看起來像這樣的小腳本:意外的通知:未定義指數當空
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