在foreach中迴圈查詢資料代碼量比較少,但是效能比較低,使用下面的位元組寫的函數可以解決
在foreach中迴圈查詢資料代碼量比較少,但是效能比較低,好點的解決辦法是將id收集起來,用in一次性查詢,但是這引發了資料結構不是我們用PHP內建的函數可以合并的,今天測試了一下: 使用下面的位元組寫的函數可以解決 從資料庫中取出來的資料總是或多或少不符合我們心目中的資料結構,類似於下面的倆個數組,要形成SQL中類似於left join後兩個數組合并: 代碼如下:$test1 = Array( 0 => Array( 'id' => 9478137, 'create_time' => 1394760724 ), 1 => Array( 'id' => 9478138, 'create_time' => 1394760725 ), 2 => Array( 'id' => 9478138, 'create_time' => 1394760725 ) ); $test2 = array( 0 => array( 'id' => 9478137, 'message' => 'love you' ), 1 => array( 'id' => 9478138, 'message' => 'miss you' ) ); 如果要將這兩個數組,類似於sql中的left join 關聯起來我們用什麼函數呢?額我沒有找見就自己寫了 剛開始的時候,用的是嵌套迴圈:效率低下 代碼如下:function _mergerArray($array1, $array2, $field1, $field2 = '') { $ret = array(); foreach($array1 as $key1 => $value1 ) { foreach ($array2 as $key2 => $value2) { if($value1[$field1] == $value2[$field2]) { $ret[$key1] = array_merge($value1, $value2); } } } return $ret; } 改進後的辦法,使用數組下標,使用兩次迴圈:形成類似於left join的方式 代碼如下:$test1 = Array( 0 => Array( 'id' => 9478137, 'create_time' => 1394760724 ), 1 => Array( 'id' => 9478138, 'create_time' => 1394760725 ), 2 => Array( 'id' => 9478138, 'create_time' => 1394760725 ) ); $test2 = array( 0 => array( 'id' => 9478137, 'message' => 'love you' ), 1 => array( 'id' => 9478138, 'message' => 'miss you' ) ); function _mergerArray($array1, $array2, $field1, $field2 = '') { $ret = array(); //使用數組下標的辦法 foreach ($array2 as $key => $value) { $array3[$value[$field1]] = $value; } foreach ($array1 as $key => $value) { $ret[] = array_merge($array3[$value[$field1]], $value); } return $ret; } $ret = _mergerArray($test1, $test2, 'id', 'id'); print_r($ret);exit; 列印出來結果如下: 代碼如下:Array ( [0] => Array ( [id] => 9478137 [message] => love you [create_time] => 1394760724 ) [1] => Array ( [id] => 9478138 [message] => miss you [create_time] => 1394760725 ) [2] => Array ( [id] => 9478138 [message] => miss you [create_time] => 1394760725 ) ) 相當於left join了吧?