我有一个小的PHP脚本,它从数组中选择一个随机句子
$prefixes = array('sentence 1', 'sentence 2');
echo $prefixes[rand(0,count($prefixes)-1)];
如何让它不连续两次选择相同的句子?
编辑:对不起,是的,会有大约100个句子,它们可以一次又一次地使用,而不是连续两次。这是一个点击事件,使用AJAX将句子重新加载到页面,如果它连续两次选择相同的句子,则看起来点击按钮没有做任何事情,因为没有页面刷新。感谢
编辑2:基本上它是带有句子的DIV,当你点击一个按钮时,它会通过AJAX将一个新句子加载到DIV中,并用新句子替换旧句子。有时它连续两次加载相同的句子,这样按钮没有做任何事情
答案 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调用传递句子索引号,以防止连续两次使用相同的句子。当你返回一个句子时,返回句子本身及其索引。当您请求新句子时,传递旧句子索引。不要随机播放数组,因此您可以在请求之间识别相同的句子。