PHP x Phalcon で遭遇した事例です。
Postgres のストアドクロシージャの処理をPHPに移植する案件ではまりました。
↑
こんな環境も珍しいでしょうが…。
配列を初期化したあと、指定した回数回して、自分自身に値を加算していきます。
1 2 3 4 5 6 7 8 9 10 11 | $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で動かすと、インデックスがまるでききません。
つまり、「まだ値が確定していない配列に対し、キーで参照するのはおかしい」ということですね。
解決策は、事前にインデックスをちゃんとセットすることです。
1 2 3 4 5 | for ( $cnt = 0; $cnt < 48; $cnt ++) { $can [] = '' ; $tel [] = '' ; $shop [] = '' ; } |
この後、加算処理を入れれば動きます。
PHPで最初から書けばこんなことにならないと思いますが、
他人の書いたコードを適用したり、多言語から移植とかイレギュラーなことをしたら遭遇するかもです。
怪しいコードは、1行ずつテスト、ですね。
参考になりましたら幸いです。
以上です。
コメント