从PHP中的URL字符串生成有效的数组键

时间:2011-01-30 15:16:04

标签: php arrays algorithm

我有一个带有一些预定义值的PHP数组:

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

我需要创建一个函数,其中字符串输入将始终返回相同的有效数组键,以便在我调用时:

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

我从数组中总是收到相同的密钥(我不关心哪一个)。显然我无法将关系存储在数据库中,传递给GiveMeAKey方法的字符串可以是任何URL。

我想知道是否有办法做到这一点?

3 个答案:

答案 0 :(得分: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 :(得分:1)

我认为你想要的是Hash function

答案 2 :(得分:1)

哈希函数的另一种替代方法可能是计算字符串的ASCII和,然后以模2返回。