rasgele bir düzenlemesini php

3 Cevap

Böyle rastgele bir dizisini almak için çalışıyorum

srand((float) microtime() * 10000000);
$input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
$rand_keys = array_rand($input, 2);
echo $input[$rand_keys[0]] . "\n";
echo $input[$rand_keys[1]] . "\n";

I $rand_keys = array_rand($input, 2);$rand_keys = array_rand($input, 5); varsa rastgele 2 numaralarını gösterir ama tüm 5 göstermek istiyorum beri çalışmıyor. Buna neden olan nedir. Ben array_rand kullanmanız gerekir. teşekkürler

3 Cevap

array_rand onlar orijinal dizideki var aynı sırayla anahtarları sıralar. Bir karıştırılan dizi istiyorsanız, shuffle işlevini ilk kullanın:

$input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
shuffle($input);
$rand_keys = array_rand($input, 5);
for ($i = 0; $i < count($rand_keys); $i++) {
    echo $input[$rand_keys[$i]] . "\n";
}

Tabii ki, tüm beş erişmek durumunda, tüm at array_rand aramak gerek yoktur, ama ikinci parametre değişen ediyorsanız, bu hala çalışır.

Bir kenara, srand işlevini çağırma gibi gereksiz-PHP 4.2 olarak sizin için bitti.

Bu işlevin Changelog:

5.2.10   The resulting array of keys is no longer shuffled.

this function doesn't return elements in random order, it returns random elements. So if you want to get 5 random elements from your array, it just gets you all elements.

Bu tuşları yeniden düzenler, çünkü orijinal dizide kullanımı shuffle istemiyorum varsayıyorum? Eğer öyleyse, o zaman sadece değişmeden giriş dizi bırakarak, rastgele tuşları ile dizi shuffle.

$rand_keys = array_rand($input, 5);
shuffle($rand_keys);
print_r($rand_keys);
/**
 * Sample output
 Array
 (
    [0] => 0
    [1] => 1
    [2] => 4
    [3] => 2
    [4] => 3
 )
 */