記使用陣列做快取的方法
阿新 • • 發佈:2018-12-30
先來看下面這段程式碼:當$value['userid']的值存在大量的相同值的話,每次迴圈 new Class_A 會造成資源浪費,$arr 中的資料少的話還不太明顯,若資料量大的話,每次迴圈都建立物件,就會十分浪費資源了。
(當然資料量過多,最好不要使用陣列去儲存,在此只是做一個示例)
foreach ($arr as $value) { if($value){ //初始化引數 $a = null; $user_info = array(); $a = new Class_A($value['userid']); $user_info = $a->getUserInfo(); if($user_info['name'] == 'test'){ /***程式碼段***/ }else{ /***程式碼段***/ } } }
在$arr中,當 $value['userid'] 的值有重複,且用到$value['userid']的這段程式碼比較耗費資源的時候,可以用一個數組來做快取,避免資源的浪費。程式碼如下:
$userid = array(); foreach ($arr as $value) { if($value){ //初始化引數 $a = null; $user_info = array(); if($userid[$value['userid']]){ $user_info['name'] = 'test'; }else{ //比較消耗資源的一段程式碼 $a = new Class_A($value['userid']); $user_info = $a->getUserInfo(); } if($user_info['name'] == 'test'){ //$value['userid']作為key的值,存入$userid陣列中 $userid[$value['userid']] = 1; /***程式碼段***/ }else{ /***程式碼段***/ } } }
使用上面這種方式,可以避免不必要的資源被浪費。