是否有可能在PHP5.3中获得标量/数组变量的唯一标识 像对象的对象散列一样。例如,我有:变量$ a和变量的唯一标识(如spl_object_hash)
$a = array(1, 2, 3);
$b = &$a;
如此独特的ID $ B,必须是相同的,从内存指针也许derrived。 我没有找到spl_object_hash
的任何替代功能。
是否有可能在PHP5.3中获得标量/数组变量的唯一标识 像对象的对象散列一样。例如,我有:变量$ a和变量的唯一标识(如spl_object_hash)
$a = array(1, 2, 3);
$b = &$a;
如此独特的ID $ B,必须是相同的,从内存指针也许derrived。 我没有找到spl_object_hash
的任何替代功能。
小解决方法:
function unique_var($var) {
return md5(serialize($var));
}
只有问题在于它无法区分两个不同的变量,具有相同的值,我认为这可能在这里需要。 – DaveRandom
不确定它需要区分不同的阵列。他说'$ a'和'$ b'的唯一ID必须相同;这将使用彼得的技术。但是,当然,我可以使用相同的数据创建另一个新数组,并获得相同的散列,这可能就是您的意思。 –
确切地说,我需要唯一的ID,而不是数据散列,因为相同的值问题。对不起,我的回答并不那么确切。 – opio
function createHash($salt, $extra, $length = 8)
{
$hashSeed = sprintf(
'%d:%s:%s',
microtime(true),
$salt,
hash('sha1', $extra)
);
do {
$hashSeed .= ':' . uniqid();
$hash = hash('sha256', $hashSeed);
$hash = substr($hash, 0, $length);
} while (hashExists($hash)); // loop until `hashExists` returns `FALSE`.
return $hash;
}
function hashExists($hash)
{
// ... check if $hash is unique ...
// for example by comparing with a list of stored hashes
return false; // return false when $hash is unique
}
例如,你可以使用它像这样:
$arr = array(1, 2, 3);
$salt = $arr[0]; // generate some salt, could be anything
$extra = $arr[1] . $arr[2]; // generate some extra spice
$length = 32; // let’s get a long hashcode (defaults to 8)
$hash = createHash($salt, $extra, $length);
print 'Hashcode: ' . $hash;
这将输出的东西沿着这些路线:
Hashcode: 3d267e5c1232476b75d8c3dbe68474c9
PHP没有按” t做内存指针。至多你可以做'md5(serialize($ a))'来获得一个签名,但是这不会让你区分恰好具有相同内容的两个海洋数组。 –
我认为,PHP在内部参考表中有内存指针。所以我正在寻找一些来自他们的身份证件。我不能使用数据散列。两个变量(其中第一个不是第二个参考)可以具有相同的值。 – opio
是的,它在内部具有标准C/C++指针,但它们不会暴露于脚本级别。 –