PHP - 不要重复随机选择

时间:2010-10-01 16:11:06

标签: php

我有一个小的PHP脚本,它从数组中选择一个随机句子

$prefixes = array('sentence 1', 'sentence 2');

echo $prefixes[rand(0,count($prefixes)-1)];

如何让它不连续两次选择相同的句子?

编辑:对不起,是的,会有大约100个句子,它们可以一次又一次地使用,而不是连续两次。这是一个点击事件,使用AJAX将句子重新加载到页面,如果它连续两次选择相同的句子,则看起来点击按钮没有做任何事情,因为没有页面刷新。感谢

编辑2:基本上它是带有句子的DIV,当你点击一个按钮时,它会通过AJAX将一个新句子加载到DIV中,并用新句子替换旧句子。有时它连续两次加载相同的句子,这样按钮没有做任何事情

5 个答案:

答案 0 :(得分:1)

嗯,你可以做的是改用shuffle

$prefixes = array('sentence 1', 'sentence 2');
shuffle($prefixes);

然后,每次使用后删除它们:

$prefix = array_pop($prefixes); // Removes the element when it returns

或者增加数组:

$prefix = current($prefixes); // fetches the current element
next($prefixes); //increments the internal array pointer

答案 1 :(得分:1)

session_start();
$prev = isset($_SESSION['last_number']) ? $_SESSION['last_number'] : null;
do {
  $_SESSION['last_number'] = mt_rand(0,count($prefixes)-1);
} while ($_SESSION['last_number'] === $prev);
echo $prefixes[$_SESSION['last_number']];

当然,请确保$prefixes中有多个元素,否则它会陷入无限循环。

答案 2 :(得分:0)

您需要编写新功能。记录rand()的上一个结果,并根据它检查当前结果。虽然这两个值相同,但请再次致电rand()

答案 3 :(得分:0)

好吧,我没有得到你想做的,但我会尝试:你想从一系列句子中随机选择一些句子并且是唯一的吗?

// version 1: shuffle!
shuffle($sentences);
$result = array_slice($sentences, 0, NUMBER_OF_SENTENCES);

// version 2: array_rand!
// a) $result will contain the INDEX in the entry in the $sentences array.
$result = array_rand($sentences, NUMBER_OF_SENTENCES);
// b) $result will contain the sentences
$result = array_rand(array_flip($sentences), NUMBER_OF_SENTENCES);

答案 4 :(得分:0)

由于您是通过Ajax加载的,因此您只需要通过Ajax调用传递句子索引号,以防止连续两次使用相同的句子。当你返回一个句子时,返回句子本身及其索引。当您请求新句子时,传递旧句子索引。不要随机播放数组,因此您可以在请求之间识别相同的句子。