2024 日本 PHP 研討會

QuickHashStringIntHash::loadFromFile

(沒有版本資訊,可能只存在於 Git 中)

QuickHashStringIntHash::loadFromFile此工廠方法從檔案建立雜湊表

說明

public static QuickHashStringIntHash::loadFromFile(字串 $filename, 整數 $size = 0, 整數 $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