2

我在 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 中完成,所以进行随机选择,这也不是上次选择的重复?谢谢!

4

2 回答 2

2
r=$last
while [ "$last" = "$r" ]
do
    r=$(($RANDOM % 12))
done
export last=$r

如果您一次又一次地调用脚本,那么假设脚本名称是test.sh您需要调用它. test.sh而不是./test.sh,它将使脚本在当前 shell 中运行。否则,甚至export不需要。否则,创建临时文件方法是获取最后一个值的另一种可靠方法。

于 2013-05-10T09:19:34.173 回答
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 环境,因此您需要在当前 shell中执行它:

source ./next-index.sh

保存脚本后将next-index.sh归档。

您也可以在执行之间保存$perm到文件。

于 2013-05-10T09:32:23.640 回答