2

私はこれを Linux BASH シェルで書きましたが、PHP でより良い解決策があればそれで十分です。

12 個の要素の配列からランダムに選択する必要があります。これは私がこれまでやってきたことです:

# Display/return my_array that's been randomly selected:
# Random 0 to 11:
r=$(( $RANDOM % 12 ))
echo ${my_array[$r]}

呼び出しが行われるたびに、要素がランダムに選択されます。ただし、あまりにも多くの場合、同じ要素を「ランダムに」連続して選択することが何度かあります。BASHシェルまたはPHPでこれをどのように達成できるので、最後に選択したものを繰り返さないランダムな選択を行いますか? ありがとう!

4

2 に答える 2

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

このスクリプトはステートフルであることに注意してください。実行間で生成された順列を保存する必要があります。それらをシェル変数に格納することでそれを行います$perm。シェル スクリプトは呼び出し元のシェル環境を変更できないため、現在のシェルので実行する必要があります。

source ./next-index.sh

スクリプトを保存すると、next-index.shファイルに保存されます。

$permまたは、実行の間にファイルに保存することもできます。

于 2013-05-10T09:32:23.640 に答える
2
r=$last
while [ "$last" = "$r" ]
do
    r=$(($RANDOM % 12))
done
export last=$r

スクリプトを何度も呼び出す場合、スクリプト名がの代わりに のtest.shように呼び出す必要があると仮定すると、スクリプトは現在のシェルで実行されます。それ以外の場合は必要ありません。それ以外の場合は、一時ファイル アプローチを作成することは、最後の値を取得するもう 1 つの強力な方法です。. test.sh./test.shexport

于 2013-05-10T09:19:34.173 に答える