我在Linux BASH shell中写过这个,但如果在PHP中有一个更好的解决方案就可以了。
我需要从12个元素的数组中生成随机选择。这就是我到目前为止所做的事情:
# Display/return my_array that's been randomly selected:
# Random 0 to 11:
r=$(( $RANDOM % 12 ))
echo ${my_array[$r]}
每次调用时,它会随机选择一个元素。但是,它经常“随机”选择连续几次相同的元素。如何在BASH shell或PHP中实现这一点,以便进行随机选择,这也不是最后一个选择的重复?谢谢!
答案 0 :(得分:2)
r=$last
while [ "$last" = "$r" ]
do
r=$(($RANDOM % 12))
done
export last=$r
如果您一次又一次地调用该脚本,那么假设脚本名称为test.sh
,您需要将其称为. test.sh
而不是./test.sh
,它将使脚本运行目前的壳。否则即使export
也不需要。否则,创建临时文件方法是另一种获取最后一个值的有效方法。
答案 1 :(得分:2)
您可以创建排列,然后从中弹出值
perm=`echo $perm | sed 's/[0-9]\+//'` #remove the first number from $perm
if [ -z "$perm" ];then #if perm == ""
perm=`shuf -e {0..12}` #create new permutation
#now perm="11 7 0 4 8 12 9 5 10 6 2 1 3" for example
fi
echo $perm | cut -d' ' -f1 #show the first number from $perm
请注意,此脚本为有状态。它需要在执行之间存储生成的排列。它是通过将它们存储在shell变量$perm
中来实现的。由于shell脚本无法修改调用shell环境,因此需要执行 itside 当前shell:
source ./next-index.sh
保存脚本是next-index.sh
文件。
您也可以在执行之间将$perm
保存到文件中。