php函数(循环查找,isset,array_key_exists,in_array)效率比较

源代码

<?php
if (intval(ini_get("memory_limit")) < 1024) {
    ini_set('memory_limit', '1024M');
}
$t0 = microtime(true);
//echo $t0 . PHP_EOL;

// 生成数组
$numbers = range(10000, 19999);
// 随机打乱
shuffle($numbers);
// 翻转键值
$numbers = array_flip($numbers);
//print_r($numbers);
// 随机赋值
array_walk($numbers, function(&$v, $k){
    $group_ids = [];
    for ($i = 0; $i < 100; $i++) { 
        $group_ids[] = mt_rand(100000, 4294967000);
    }
    $v = $group_ids;
});
$t1 = microtime(true);
echo '1万个键名(每个键内包含100随机数)生成数组耗费时间:' . ($t1 - $t0) . PHP_EOL . PHP_EOL;
################################################################################
$t2 = microtime(true);
$j = 0;
foreach ($numbers as $qq => $group_ids) {
    foreach ($group_ids as $key => $value) {
        if ($value === $numbers[18000][6]) {
            echo '找到黑名单:' . $numbers[18000][6] . PHP_EOL;
        }
        $j++;
    }
}
$t3 = microtime(true);
echo '方法1:循环:' . $j . '次,耗费时间' . ($t3 - $t2) . PHP_EOL;
################################################################################
$t4 = microtime(true);
if (array_key_exists(18000, $numbers)) {
    echo '找到黑名单群号:' . $numbers[18000][6] . PHP_EOL;
}
$t5 = microtime(true);
echo '方法2:array_key_exists 检查键名或索引,耗费时间:' . ($t5 - $t4) . PHP_EOL;
################################################################################
$t6 = microtime(true);
if (isset($numbers[18000])) {
    echo '找到黑名单群号:' . $numbers[18000][6] . PHP_EOL;
}
$t7 = microtime(true);
echo '方法3:isset 检查键名或索引,耗费时间:' . ($t7 - $t6) . PHP_EOL;
################################################################################
$t8 = microtime(true);
if (in_array(18000, $numbers)) {
    echo '找到黑名单群号:' . $numbers[18000][6] . PHP_EOL;
}
$t9 = microtime(true);
echo '方法4:in_array 检查键名或索引,耗费时间:' . ($t9 - $t8) . PHP_EOL;
################################################################################

测试结果

php ./test_hashmap.php
1万个键名(每个键内包含100随机数)生成数组耗费时间:0.085103988647461

找到黑名单:1152074375
方法1:循环:1000000次,耗费时间0.054641008377075

找到黑名单群号:1152074375
方法2:array_key_exists 检查键名或索引,耗费时间:0.00033283233642578

找到黑名单群号:1152074375
方法3:isset 检查键名或索引,耗费时间:0.00029110908508301

方法4:in_array 检查键名或索引,耗费时间:0.00020408630371094
最后修改:2021 年 07 月 30 日 10 : 25 AM
如果觉得我的文章对你有用,请随意赞赏

发表评论