2011-01-30 46 views
2

我有一個PHP數組與某些特定值:生成的URL字符串一個有效的數組鍵在PHP

$aArray = array(
    0 => 'value0', 
    1 => 'value1' 
); 

我需要創建一個函數,其中字符串輸入將始終返回相同的,有效的,陣列關鍵,以便我打電話時:

GiveMeAKey('http://www.google.com'); // May return 0 or 1 

我總是從數組中接收相同的密鑰(我不在意哪一個)。很顯然,我無法將關係存儲在數據庫中,並且傳遞給GiveMeAKey方法的字符串可以是任何URL。

我不知道有沒有辦法做到這一點?

+0

你說的是剛開的哈希通過識別URL? – coreyward 2011-01-30 15:20:02

+2

如果你不在乎:`函數GiveMyAKey($ url){return 0;}`; o) – 2011-01-30 15:20:13

+0

@coreyward:是這是一個散列,但它必須是一個數值表示一個數組中的鍵,我不控制。 – jonjbar 2011-01-30 17:24:02

回答

3

您可以生成的東西從輸入字符串隨機選擇基於一個關鍵:

function GiveMeAKey($str, array $array) { 
    return $array[crc32($str) % count($array)]; 
} 

例子:

echo GiveMeAKey("http://www.google.com/", $aArray); //value0 
echo GiveMeAKey("http://www.altavista.com/", $aArray); //value1 

注:CRC32是不是一個好的哈希函數,但有不錯的屬性它返回一個32位數字,你可以使用%運算符。但是爲了你的目的,它就夠了。

1

另一種替代的散列函數,就應該像這樣計算字符串的ASCII總和,然後返回其在模2

相關問題