PHP將兩個關聯陣列合并函數提高函數效率

來源:互聯網
上載者:User

 在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了吧? 
相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。