0

次のような配列を作成することになっている小さなスクリプトを作成しました。

array(1 => array( 'month'  => 'Jan',
                  'salary' => '01/31/2013',
                  'bonus'  => '02/15/2013'),
      2 => array('month' => '',...));

基本的な考え方はわかります。メイン配列のインデックスは (数値的に) 月であり、それぞれが動的に入力される配列を保持しています。キーは、ユーザーが要求した言語によって異なります。month給与とボーナスには、給与またはボーナスが支払われた日付が割り当てられます。これまでのところ、驚きはありません。

その配列の基本構造を取得するには、これが最も簡単だと思いました。

$this->months = array_fill_keys(range(1,12), array( 'month' => null,
                                                    'salary' => null,
                                                    'bonus' => null));

次に、配列を埋めると、データをファイルに書き込もうとするところまで、すべて同じようにスムーズに実行されます。

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';
}

私が必要とする結果に到達するために。私はこれをグーグルで検索し、4 年前 (2009-05-08) に最後に変更されたこのバグ レポートに出くわしましたが、ステータスはまだ「フィードバックなし」に設定されています。
他の誰かが同様のグリッチ/バグに遭遇しましたか? それとも、ここで何か不足していますか? 設定を変更せずifに、あまりにも多くの や関数呼び出しを必要とせずに、この問題を回避するにはどうすればよいですか( 、そうあるべきです)。E_STRICT | E_ALL

ところで: Slackware 14 で PHP 5.4.7 を実行しています。この小さなアプリケーションでは、2 つの Symfony コンポーネント (ClassLoader と Console) を使用していますが、これは Symfony とは関係のないオブジェクトの一部であるため、ロードされることから、UniversalClassLoaderそれは関係ないと思います。
バグは関連していると言われているのでPDO: はい、私は PDO を使用していますが、別のクラスで使用しています。

4

2 に答える 2

0

よくわかりませんが、使ってみてください

$this->months = array_fill(1,12, array( 'month' => null,
                                                    'salary' => null,
                                                    'bonus' => null));
于 2013-05-08T03:46:18.693 に答える