2017年2月15日 星期三

PHP 陣列出現 Notice : Undefined offset 警告的解決辦法

最近 PHP 專案突然無法顯示正確資料, 由於在忙著解決樹莓派傳送 Email 問題無暇解決, 今晚得空就來檢查一下到底哪裡出問題. 使用 Firefox 的 F12 偵錯功能, 發現 ajax 傳回字串被好幾個 Notice : undefined offset 給破壞了, 難怪底下的 JSON 資料無法顯示 :


檢查原始碼, 發現原來是自己寫程式習慣太差, 沒有處理好萬一找不到陣列索引問題 :

             $RS1=search("z0050", "trade_date", $RS[$i]["trade_date"]);
             $z0050=$RS1[0]["close"];
             $RS1=search("z0056", "trade_date", $RS[$i]["trade_date"]);
             $z0056=$RS1[0]["close"];
             $RS1=null;

這裡沒有判斷陣列 $RS1 到底索引 0 存不存在就賦值, 實在很糟糕. 正確寫法如下 :

             isset($RS1[0])?$z0050=$RS1[0]["close"]:$z0050=null;
             $RS1=search("z0056", "trade_date", $RS[$i]["trade_date"]);
             isset($RS1[0])?$z0056=$RS1[0]["close"]:$z0056=null;

先用 isset() 判斷後再賦值就不會有此問題了, 參考 :


沒有留言 :