是否有可能在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++指針,但它們不會暴露於腳本級別。 –