2

リストから選択される色をエコーし​​たいのですが、それらは一意でなければなりません。私は一般的にユニークなものを生成する方法を知っていますが、適切なリストがある場合にそれを行う方法については何も知りません。

また、これをループで実行する必要があるため、以下の for ループで実行しました。

たとえば、最初に、配列に 5 つの要素があると仮定し、最初のループ内で青を選択してエコーし、青をエコーし​​た後、2 番目のループで 4 つのオプションがあり、残りの 1 つをエコーし​​ます4 つの要素がランダムに選択され、青はオプションに含まれません。

たとえば、私の目的では、次のように生成する必要があります: 青 - 白 - 緑 - 黄 - 紫 (一意)

偽物は : 青 - 青 - 緑 - 黄 - 紫 (一意ではない)

$colors= array('blue', 'green', 'yellow', 'purple', 'white');
for($i = 1; $i <=5; $i++){
echo $colors[array_rand($colors)];
}
4

4 に答える 4

3
$colors = array('blue', 'green', 'yellow', 'purple', 'white');
$colors = array_unique($colors);
shuffle($colors);
foreach($colors as $color)
  echo $color."\n";
于 2013-06-14T02:46:56.460 に答える
1

array_uniquePHPで使えます。

たとえば、次のように配列を生成するとします。

$array = array('blue','blue','green','yellow','purple');
$out = array_unique($array);

//will product
//array('blue', 'green', 'yellow', 'purple');
于 2013-06-14T02:46:46.873 に答える
0

PHP.net からの注意: 5.2.10 結果のキーの配列はシャッフルされなくなりました。だからarray_rand()私が言ったように、もう使用することはできません。代わりに、次を使用できます。

<?php
    $colors = array('blue', 'green', 'yellow', 'purple', 'white');    
    shuffle($colors);

    foreach ($colors as $shuffledColor) {
        echo $shuffledColor . "\n";
    }
?>
于 2013-06-14T02:57:12.140 に答える
0

配列をコピーしてから、コピーをシャッフルして、最後に結果をポップすることができます。

例えば:

$array = array('blue','green','yellow','purple');
$copy = $array;
shuffle($copy);
while(!empty($copy)){
    echo array_pop($copy);
}
于 2013-06-14T03:00:51.773 に答える