2024年PHP日本大会

QuickHashStringIntHash::loadFromFile

(无版本信息可用,可能仅存在于Git中)

QuickHashStringIntHash::loadFromFile此工厂方法从文件创建一个哈希表

描述

public static QuickHashStringIntHash::loadFromFile(string $filename, int $size = 0, int $options = 0): QuickHashStringIntHash

此工厂方法从磁盘上的定义文件创建一个新的哈希表。文件格式由签名'QH\0x21\0'、作为系统大小端的32位有符号整数的元素数量、包含后续元素数据字符数的32位无符号整数组成。此元素数据包含所有字符串。之后是另一个包含桶列表数量的32位有符号整数。在头部和字符串之后,是元素。它们按桶列表排序,以便不必对键进行哈希以恢复哈希表。对于每个桶列表,存储以下信息(全部为32位整数):桶列表索引、该列表中的元素数量,然后成对的两个32位无符号整数元素,其中第一个是包含键的字符串列表的索引,第二个是值。一个例子可能是

示例 #1 QuickHash StringIntHash 文件格式

00000000  51 48 21 00 02 00 00 00  09 00 00 00 40 00 00 00  |QH!.........@...|
00000010  4f 4e 45 00 4e 49 4e 45  00 07 00 00 00 01 00 00  |ONE.NINE........|
00000020  00 00 00 00 00 01 00 00  00 2f 00 00 00 01 00 00  |........./......|
00000030  00 04 00 00 00 03 00 00  00                       |.........|
00000039

示例 #2 QuickHash IntHash 文件格式

header signature ('QH'; key type: 2; value type: 1; filler: \0x00)
00000000  51 48 21 00

number of elements:
00000004  02 00 00 00

length of string values (9 characters):
00000008  09 00 00 00

number of hash bucket lists (this is configured for hashes as argument to the
constructor normally, 64 in this case):
0000000C  40 00 00 00

string values:
00000010  4f 4e 45 00 4e 49 4e 45  00

bucket lists:
  bucket list 1 (with key 7, and 1 element):
    header:
    07 00 00 00 01 00 00 00
    elements (key index: 0 ('ONE'), value = 0):
    00 00 00 00 01 00 00 00
  bucket list 2 (with key 0x2f, and 1 element):
    header:
    2f 00 00 00 01 00 00 00
    elements (key index: 4 ('NINE'), value = 3):
    04 00 00 00 03 00 00 00

参数

filename

要从中读取哈希表的的文件名。

size

要配置的桶列表数量。您传入的数字将自动向上舍入到下一个2的幂。它也自动限制在44194304之间。

options

与类构造函数相同的选项;除了大小选项被忽略。它从文件格式中读取(与QuickHashIntHashQuickHashIntStringHash类不同,在这些类中,它会根据哈希表中的条目数自动计算)。

返回值

返回一个新的QuickHashStringIntHash

示例

示例 #3 QuickHashStringIntHash::loadFromFile() 示例

<?php
$file
= dirname( __FILE__ ) . "/simple.hash.string";
$hash = QuickHashStringIntHash::loadFromFile(
$file,
QuickHashStringIntHash::DO_NOT_USE_ZEND_ALLOC
);
foreach(
range( 0, 0x0f ) as $key )
{
$i = 48712 + $key * 1631;
$k = base_convert( $i, 10, 36 );
echo
$k, ' => ', $hash->get( $k ), "\n";
}
?>

以上示例将输出类似于以下内容:

11l4 => 48712
12uf => 50343
143q => 51974
15d1 => 53605
16mc => 55236
17vn => 56867
194y => 58498
1ae9 => 60129
1bnk => 61760
1cwv => 63391
1e66 => 65022
1ffh => 66653
1gos => 68284
1hy3 => 69915
1j7e => 71546
1kgp => 73177

添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top