PHP随机字符串函数在多次调用时阻止重复输出

时间:2017-06-08 20:15:21

标签: php

以下函数将创建随机字符串输出,如果多次调用,防止重复输出/冲突的最佳方法是什么。

function random_string($length) {
            $key = '';
            $keys = array_merge(range('A', 'Z'), range('a', 'z'), array('_'));

            for ($i = 0; $i < $length; $i++) {
                $key .= $keys[array_rand($keys)];
            }

            return $key;
        }
echo "First : " . random_string(rand(3, 50));
//These have a small percentage of a chance of matching the previous random output lets eliminate all possibility of getting the same output.
echo "Second : " . random_string(rand(3, 50));
echo "Third : " . random_string(rand(3, 50));
echo "Fourth : " . random_string(rand(3, 50));

我在PHP文档中读到过array_unique可以实现我想要的但是它是最好的解决方案还是有更高效的方法。

2 个答案:

答案 0 :(得分:2)

这是一个简单的解决方案:

// array to store required strings
$stringsCollection = [];
// 4 is the number of strings that you need
while (sizeof($stringsCollection) != 4) {
    // generate new string
    $randString = random_string($length);
    // if string is not in `stringsCollection` - add it as a key
    if (!isset($stringsCollection[$randString])) {
        $stringsCollection[$randString] = 1;
    }
}
print_r(array_keys($stringsCollection));

答案 1 :(得分:1)

  

还是有更有效的方式

你正前往“过度耕种的土地”,试图解决你甚至无法命名的事情:)它是否缓慢?呆滞?然后分析并修复相关部件。 “高效”是流行语,无法确定效率对您意味着什么。

  

如果多次调用,防止重复输出/冲突的最佳方法是什么

首先,我使用具有详细(即秒或毫秒)时间戳的散列函数+某些mt_rand作为输入。它的长度有限,但您可以多次调用它并连接结果(如果需要,可以修剪)。如果你希望1000%的价值以前从未返回,你必须跟踪它们,但是你很可能假设如果输入字符串足够长则不会发生这种情况< / p>