源代码
<?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
版权属于:大卫科技Blog
本文链接:https://www.iyuu.cn/archives/442/
转载时须注明出处