カテゴリ: PHP
記事投稿日: 2016年10月15日
PHP x Phalcon で遭遇した事例です。
Postgres のストアドクロシージャの処理をPHPに移植する案件ではまりました。
↑
こんな環境も珍しいでしょうが…。
配列を初期化したあと、指定した回数回して、自分自身に値を加算していきます。
$can = []; $tel = []; $shop = []; foreach ($result as $key => $val) { for ($i = 0; $i < 48; $i++) { $can[$i] = $can[$i] +$val[$i]; $tel[$i] = $can[$i] +$val[$i]; $shop[$i] = $shop[$i] +$val[$i]; } }
すると、Notice: Undefined offset: 0(インデックスの数) と出力されます。
Postgres のストアドでは、上のような書き方になって動いていたのですが、
PHPで動かすと、インデックスがまるでききません。
つまり、「まだ値が確定していない配列に対し、キーで参照するのはおかしい」ということですね。
解決策は、事前にインデックスをちゃんとセットすることです。
for ($cnt = 0; $cnt < 48; $cnt++) { $can[] = ''; $tel[] = ''; $shop[] = ''; }
この後、加算処理を入れれば動きます。
PHPで最初から書けばこんなことにならないと思いますが、
他人の書いたコードを適用したり、多言語から移植とかイレギュラーなことをしたら遭遇するかもです。
怪しいコードは、1行ずつテスト、ですね。
参考になりましたら幸いです。
以上です。
コメントを残す