スクリプト書き
今日も今日とてスクリプト書き。コンテストも3回目なのでルーチンでできるだろうと言われそうだが、それなりに仕様変更があるので昨年のものを使い回すというわけにいかないのだ。
今日のバグ。$modieidという映像に投票したかどうかを判定するために、$sumi[]というarrayに $movieid が含まれているかどうかを調べようとした。
if(FALSE != array_search($movieid, $sumi)) { //投票済の場合の処理 }
ところが、どうしても1件だけ未投票とみなされてしまう。array_search は「検索し、見つかった場合に対応するキーを返す」関数なので、$sumi[0] == $movieid の場合は、array_search($movieid, $sumi) の返り値は 0 である。
具体例を出すと
$sumi = ( 0 => "momo001", 1 => "momo002", 2 =>"momo003" )
のとき、array_search("momo002", $sumi) は $sumi における momo002 のキー「1」を返すが、array_search("momo001", $sumi) は momo001 のキー「0」を返すのだ。
問題は、FALSE は値としては 0 ということ。従って、array_search("momo002", $sumi) = 1 なので、!= FALSE だが、array_search("momo002", $sumi) = 0 なので、== FALSE になってしまうらしい。解決方法は
if(FALSE !== array_search($movieid, $sumi))
と書けば、値だけでなく型までチェックしてくれるので、本当にFALSEなのかどうかがわかる、らしい。
いやー、=== だの !== って初めて知った。