【问题标题】:PHP - Generate unique id based on arguments [closed]PHP - 根据参数生成唯一 ID [关闭]
【发布时间】:2013-05-22 11:15:04
【问题描述】:

我不久前编写了这个小函数来根据传递的参数创建一个唯一的 id。我的问题是,是否有更好的(性能)方法来解决这个问题。

function id_make(/* POLYMORPHIC */)
{
    return md5(serialize(func_get_args()));
}

echo id_make(__FILE__, 'something', ['item' => 'some_content']);

【问题讨论】:

  • 性能是为了什么?储物空间少?更少的计算时间?
  • '_ FILE _' 本身只是一个文件名,但也许给它一个上下文(例如该文件的内容)会更有意义。
  • @Jack 是的,这就是我有时正在做的事情。通常像:id_make(md5_file(FILE), 'some other identifier');

标签: php


【解决方案1】:

对于给定的函数签名,没有太多需要改进的地方 - 连续 3 个链式函数调用可以精确地执行您希望它们执行的操作,因此无需优化或剥离。

鉴于这 3 个函数调用或多或少都归结为内部编译的原生功能,我也不认为有替代方法可以提供相同级别的灵活性,而不会产生可能的冲突。

所以不,这个功能没有什么需要改进的。如果您需要这种灵活的散列,外部代码可能会使用一些优化。

【讨论】:

    【解决方案2】:

    crc32 似乎比 md5 快一点 (http://www.php.net/manual/en/function.crc32.php)

    json_encode() 也比 serialize() 快一点。

    【讨论】:

    • json_encode 也是 less flexible than serialize 并且会稍微增加碰撞的机会。对于任何预期的用例来说,当然不太可能。
    【解决方案3】:

    我猜想在尝试将相当大的对象作为参数传递时会出现性能问题?

    我不知道您的脚本的用途,但也许这可能会有所帮助。也许你应该循环遍历参数,当它是一个对象时,你可以用它的哈希替换它。 见:http://php.net/manual/en/function.spl-object-hash.php

    但是因为正如我所说我不知道​​目的,您应该注意,当对象被销毁时,可能会重复使用相同的哈希。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-09
      • 2011-12-24
      • 1970-01-01
      • 2011-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多