PHP將兩個(gè)關(guān)聯(lián)數(shù)組合并函數(shù)提高函數(shù)效率

字號(hào):


    在foreach中循環(huán)查詢數(shù)據(jù)代碼量比較少,但是性能比較低,使用下面的字節(jié)寫(xiě)的函數(shù)可以解決
    在foreach中循環(huán)查詢數(shù)據(jù)代碼量比較少,但是性能比較低,好點(diǎn)的解決辦法是將id收集起來(lái),用in一次性查詢,但是這引發(fā)了數(shù)據(jù)結(jié)構(gòu)不是我們用PHP自帶的函數(shù)可以合并的,今天測(cè)試了一下:
    使用下面的字節(jié)寫(xiě)的函數(shù)可以解決
    從數(shù)據(jù)庫(kù)中取出來(lái)的數(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)起來(lái)我們用什么函數(shù)呢?額我沒(méi)有找見(jiàn)就自己寫(xiě)了
    剛開(kāi)始的時(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;
    打印出來(lái)結(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了吧?