Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 多值上的哈希方法?_Php_Sorting_Hash - Fatal编程技术网

Php 多值上的哈希方法?

Php 多值上的哈希方法?,php,sorting,hash,Php,Sorting,Hash,有时,我发现我需要对一些对象进行排序,按多个值对它们进行分组。我通常通过将这些值连接在一起来实现这一点,在它们之间加一个下划线或其他分隔符,然后将其用作数组索引 // group all objects with a common parent_id, date, and type foreach ($objects as $obj) { $hash = $obj->parent_id . '_' . $obj->date . '_' . $obj->type;

有时,我发现我需要对一些对象进行排序,按多个值对它们进行分组。我通常通过将这些值连接在一起来实现这一点,在它们之间加一个下划线或其他分隔符,然后将其用作数组索引

// 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;
}
……哎呀!一定有比滥用PHP的松散类型和字符串连接更好的方法。有没有办法对多个值执行哈希?看来我应该可以这样做:

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

我已经在使用最好的方法了,还是有更好的方法?

使用PHP的序列化使它更整洁,但效率更低:

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

因为散列键是字符串,所以您可能已经在用最好的方式,通过字符串串联的散列来实现它了——这就是我过去在需要时执行类似函数的方式

在concat-then散列中,“Jim”和“Fisher”的散列是“JimFisher”的散列。反转输入会产生“FisherJim”的散列,这是一个不同的字符串,因此它不容易受到通过重新排序输入的攻击。concat-then-hash是否能够抵御第二次预映像攻击?你能找到另一个输入与hash2\u concat\u然后\u hash(“Jim”,“Fisher”)冲突的例子吗?再说一次,你不需要强迫它!一个例子是hash2_concat_then_hash(“Ji”,“mFisher”),因为“Ji”和“mFisher”也连接到“JimFisher”


有关更多信息,请查看

它没有比简单的字符串连接快多少,即使不需要SHA1步骤,除非您需要所有键都具有相同的字符串长度。