国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

PHP compare des tableaux bidimensionnels, donnez-moi quelques conseils
巴扎黑
巴扎黑 2017-05-16 13:08:04
0
2
518

Un tableau bidimensionnel de la liste des participants
$arr1=array(
array('name'=>'Zhang San','phone'=>'1354459845','address' => ;'N° 5, Première rue'),
array('name'=>'李思' ,'phone'=>'1323439845','address'=>'No. 3, First Street'),
array('name'=>'Chen Wu','phone'=>' 1354353145' ,'address'=>'No. 2, First Street'),
);

Un tableau bidimensionnel de listes de gains de loterie historiques
$arr2=array(
array('name'=>'mary','phone'=>'1313598445 ','address'=>'No. 8, First Street'),
array('name'=>'jhon','phone'=>'1323298425','addre ss'=>'No. 9, First Street'),
array('name'=>'Chen Wu', 'phone'=>'1353dsad45', 'address'=>'一Rue n°10'),
);
Il faut maintenant comparer ces deux tableaux. Tant qu'un des noms nom, téléphone ou adresse appara?t dans la liste historique, il faut le retirer de l'arr1 participant. liste d'activités.
En plus de deux comparaisons foreach, existe-t-il un bon moyen d'obtenir rapidement les résultats de la liste d'activités filtrée?? Les deux listes comptent au moins plusieurs milliers. Si vous utilisez foreach deux fois, la vitesse sera très lente.

巴扎黑
巴扎黑

répondre à tous(2)
漂亮男人
$arr = [
    ["name" => "李四", "phone" => '5555', "address" => 'aaa' ],
    ["name" => "張三", "phone" => '6666', "address" => 'bbb' ],
    ["name" => "老王", "phone" => '7777', "address" => 'ccc' ],
];
$filter = [
    ["name" => "李四", "phone" => '3333', "address" => 'xyz' ],
    ["name" => "王三", "phone" => '6666', "address" => 'xyz' ],
];

$arr = array_filter($arr, function($i) use ($filter) {
    return !in_array($i['name'], array_column($filter, 'name')) && !in_array($i['phone'], array_column($filter, 'phone'));
});
var_dump($arr);
劉奇
$arr1 = [];
$arr2 = [];

///////準(zhǔn)備測(cè)試數(shù)據(jù)
for ($i = 0; $i < 100000; ++$i) {
    $arr1_sub = [];
    $arr1_sub ['name'] = sprintf('測(cè)試%s', rand(0, 10000));
    $arr1_sub ['phone'] = sprintf('13%s', rand(111111111, 999999999));
    $arr1_sub ['address'] = sprintf('一街%s號(hào)', rand(0, 10000));
    $arr1[] = $arr1_sub;

    $arr2_sub = [];
    $arr2_sub['name'] = sprintf('測(cè)試%s', rand(0, 10000));
    $arr2_sub['phone'] = sprintf('13%s', rand(111111111, 999999999));
    $arr2_sub['address'] = sprintf('一街%s號(hào)', rand(0, 10000));
    $arr2[] = $arr2_sub;
}

//////測(cè)試開始
$begin = microtime(true);

$diff_key_array = [
    'name' => 'phone',
    'phone' => 'phone',
    'address' => 'phone',
];
$diff_res_array = [];

///1、根據(jù) key,緩存對(duì)一個(gè)數(shù)據(jù)差
foreach ($diff_key_array as $k => $v) {
    ///找到對(duì)應(yīng)的 name、address、phone 需要留下的數(shù)據(jù)
    $diff_res_array[$k] = array_diff_assoc(array_column($arr2, $v, $k), array_column($arr1, $v, $k));
}
unset($arr1); //清理不需要的數(shù)組 arr2

///過濾對(duì)應(yīng) arr2 數(shù)據(jù)
$result = array_filter($arr2, function ($value) use ($diff_key_array, &$diff_res_array) {
    foreach ($diff_key_array as $k => $v) {
        $item = $value[$k];
        //利用 php 中,hash 找 key 的方案,實(shí)現(xiàn)解決 O(1)查找
        if (!isset($diff_res_array[$k][$item])) {
            return false;
        }
    }
    return true;
});
unset($diff_key_array);
unset($diff_res_array);

$exec_time = microtime(true) - $begin;
var_dump($exec_time);
var_dump($result);

/// 10萬(wàn)數(shù)據(jù),用時(shí)約 float  0.69 s
///100萬(wàn)數(shù)據(jù),用時(shí)約 float 14.86 s
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal