カテゴリ: PHP
記事投稿日: 2016年10月15日
記事更新日: 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行ずつテスト、ですね。
参考になりましたら幸いです。
以上です。
コメントを残す