2011-03-11 89 views
3

偶爾,我發現我需要對一些對象進行排序,並將它們按多個值進行分組。我通常通過將值連接在一起來實現這一點,在其間使用下劃線或其他劃線員,然後將其用作數組索引。有多個值的哈希方法?

// group all objects with a common parent_id, date, and type 
foreach ($objects as $obj) { 
    $hash = $obj->parent_id . '_' . $obj->date . '_' . $obj->type; 
    $sorted_objects[$hash][] = $obj; 
} 

... ick!要比濫用PHP的寬鬆輸入和字符串連接有更好的方法。有沒有辦法對多個值執行散列?看來我應該能夠只是做這樣的事情:我已經用最好的方法

$hash = sha1_multiple($obj->parent-id, $obj->date, $obj->type); 

上午,還是有更好的辦法?

+0

它沒有得到比簡單字符串連接更快的速度 – 2011-03-11 18:07:56

+0

即使SHA1步驟不應該是必需的,除非您需要所有的鍵都是相同的字符串長度。 – caw 2011-03-13 19:29:32

回答

2

由於哈希鍵是字符串你可能做的已經是最好的方式,通過字符串連接的哈希 - 這是怎麼當我需要過去時,我已經執行了類似的功能。

4

使用PHP的序列化可以有點整潔,但效率較低:

function sha1_multiple() { 
    $args = func_get_args(); 
    return sha1(serialize($args)); 
}