我正在尝试找到一种将大量字符串映射到整数的方法。我使用数组进行了尝试,发现了一种我不理解的行为。当我按字符串(array('someStirng' => 1))索引数组时,它消耗的内存比反之(array(1 =>'someString'))要少。这是否意味着,最好按字符串索引数组并将整数作为大量字符串-整数对的值,或者有什么问题?为什么内存分配差异这么大?
function gen() {
static $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomString = '';
for ($i = 0; $i < 8; $i++) {
$randomString .= $characters[rand(0, strlen($characters) - 1)];
}
return $randomString;
}
按字符串索引 - 返回 490 KB
$a = array();
for($x = 0;$x < 100000;$x++){
$a[gen()] = $x;
}
echo (memory_get_usage() / 1024) . ' KB';
按整数索引 - 返回 10790.2890625 KB(比第一种情况多约 22 倍,但存储的信息量相同!)
$a = array();
for($x = 0;$x < 100000;$x++){
$a[$x] = gen();
}
echo (memory_get_usage() / 1024) . ' KB';