PHP將兩個(gè)關(guān)聯(lián)數(shù)組合并函數(shù)提高函數(shù)效率
更新時(shí)間:2014年03月18日 11:24:45 作者:
在foreach中循環(huán)查詢數(shù)據(jù)代碼量比較少,但是性能比較低,使用下面的字節(jié)寫的函數(shù)可以解決
在foreach中循環(huán)查詢數(shù)據(jù)代碼量比較少,但是性能比較低,好點(diǎn)的解決辦法是將id收集起來,用in一次性查詢,但是這引發(fā)了數(shù)據(jù)結(jié)構(gòu)不是我們用PHP自帶的函數(shù)可以合并的,今天測(cè)試了一下:
使用下面的字節(jié)寫的函數(shù)可以解決
從數(shù)據(jù)庫中取出來的數(shù)據(jù)總是或多或少不符合我們心目中的數(shù)據(jù)結(jié)構(gòu),類似于下面的倆個(gè)數(shù)組,要形成SQL中類似于left join后兩個(gè)數(shù)組合并:
$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'
)
);
如果要將這兩個(gè)數(shù)組,類似于sql中的left join 關(guān)聯(lián)起來我們用什么函數(shù)呢?額我沒有找見就自己寫了
剛開始的時(shí)候,用的是嵌套循環(huán):效率低下
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;
}
改進(jìn)后的辦法,使用數(shù)組下標(biāo),使用兩次循環(huán):形成類似于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();
//使用數(shù)組下標(biāo)的辦法
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;
打印出來結(jié)果如下:
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
)
)
相當(dāng)于left join了吧?
使用下面的字節(jié)寫的函數(shù)可以解決
從數(shù)據(jù)庫中取出來的數(shù)據(jù)總是或多或少不符合我們心目中的數(shù)據(jù)結(jié)構(gòu),類似于下面的倆個(gè)數(shù)組,要形成SQL中類似于left join后兩個(gè)數(shù)組合并:
復(fù)制代碼 代碼如下:
$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'
)
);
如果要將這兩個(gè)數(shù)組,類似于sql中的left join 關(guān)聯(lián)起來我們用什么函數(shù)呢?額我沒有找見就自己寫了
剛開始的時(shí)候,用的是嵌套循環(huán):效率低下
復(fù)制代碼 代碼如下:
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;
}
改進(jìn)后的辦法,使用數(shù)組下標(biāo),使用兩次循環(huán):形成類似于left join的方式
復(fù)制代碼 代碼如下:
$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();
//使用數(shù)組下標(biāo)的辦法
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;
打印出來結(jié)果如下:
復(fù)制代碼 代碼如下:
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
)
)
相當(dāng)于left join了吧?
您可能感興趣的文章:
- PHP中數(shù)組合并的兩種方法及區(qū)別介紹
- PHP合并數(shù)組+與array_merge的區(qū)別分析
- php 數(shù)組的合并、拆分、區(qū)別取值函數(shù)集
- php下將多個(gè)數(shù)組合并成一個(gè)數(shù)組的方法與實(shí)例代碼
- php二維數(shù)組合并及去重復(fù)的方法
- php中有關(guān)合并某一字段鍵值相同的數(shù)組合并的改進(jìn)
- php 操作數(shù)組(合并,拆分,追加,查找,刪除等)
- php數(shù)組合并array_merge()函數(shù)使用注意事項(xiàng)
- PHP將二維數(shù)組某一個(gè)字段相同的數(shù)組合并起來的方法
- PHP中通過加號(hào)合并數(shù)組的一個(gè)簡(jiǎn)單方法分享
- PHP合并兩個(gè)數(shù)組的兩種方式的異同
- PHP簡(jiǎn)單實(shí)現(xiàn)合并2個(gè)數(shù)字鍵數(shù)組值的方法
相關(guān)文章
php使用指定編碼導(dǎo)出mysql數(shù)據(jù)到csv文件的方法
這篇文章主要介紹了php使用指定編碼導(dǎo)出mysql數(shù)據(jù)到csv文件的方法,涉及php查詢mysql及操作csv文件的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03WordPress開發(fā)中的get_post_custom()函數(shù)使用解析
這篇文章主要介紹了WordPress開發(fā)中的get_post_custom()函數(shù)使用解析,get_post_custom()函數(shù)用于獲取自定義字段,需要的朋友可以參考下2016-01-01PHP高級(jí)編程實(shí)例:編寫守護(hù)進(jìn)程
這篇文章主要介紹了PHP高級(jí)編程實(shí)例:編寫守護(hù)進(jìn)程,守護(hù)進(jìn)程是脫離于終端并且在后臺(tái)運(yùn)行的進(jìn)程,本文講解使用PHP編寫守護(hù)進(jìn)程,并給出了代碼實(shí)例,需要的朋友可以參考下2014-09-09php中日期加減法運(yùn)算實(shí)現(xiàn)代碼
通過對(duì)某個(gè)日期增加或減去幾天,得到另外一個(gè)日期2011-12-12php的instanceof和判斷閉包Closure操作示例
這篇文章主要介紹了php的instanceof和判斷閉包Closure操作,結(jié)合實(shí)例形式分析了PHP使用instanceof判斷類實(shí)例以及判斷閉包Closure相關(guān)操作技巧,需要的朋友可以參考下2020-01-01PHP實(shí)現(xiàn)的通過參數(shù)生成MYSQL語句類完整實(shí)例
這篇文章主要介紹了PHP實(shí)現(xiàn)的通過參數(shù)生成MYSQL語句類,結(jié)合完整實(shí)例形式分析了生成MYSQL語句類的實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下2016-04-04