以下函数将创建随机字符串输出,如果多次调用,防止重复输出/冲突的最佳方法是什么。
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可以实现我想要的但是它是最好的解决方案还是有更高效的方法。
答案 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>