shuffle ve PHP array_rand fonksiyonları arasındaki fark tam olarak nedir? Hiçbir fark varsa hangi hızlıdır.
Teşekkürler
Bir dizide çağrıldığında, shuffle randomizes the order of all elements of that array.
Örneğin, aşağıdaki kod bölümü:
$arr = array(1, 2, 3, 4, 5);
shuffle($arr);
var_dump($arr);
Bu çıktıyı verebilir:
array
0 => int 3
1 => int 1
2 => int 5
3 => int 4
4 => int 2
Bütün dizi kendisi değiştirilmiş olur.
When called on an array, array_rand returns one or more elements from that array, randomly selected.
Örneğin, aşağıdaki kod bölümü:
$arr = array(1, 2, 3, 4, 5);
$randomly_selected = array_rand($arr, 3);
var_dump($randomly_selected);
Çıktı tis tür verebilir:
array
0 => int 0
1 => int 2
2 => int 3
Ilk dizinin bir alt dizisi döndürülür - ve ilk dizi değiştirilmez.
shuffle, bir dizinin elemanlarının sırasını değiştirir. Bu bir sıralama işlevi var.
array_rand döner n (argümanlar [1], öntanımlı 1) diziden rasgele elemanları. Bu anahtarlar veya bir dizi (argümanlar için [1]> 1) olan dizinin öğeleri başvuru (argümanlar [0]) (argümanlar [1] == 1) bir anahtar verir.
Shuffle() tüm dizi alır ve içindeki elemanların konumu rastgele dağıtır. [Not: PHP'nin önceki sürümlerinde shuffle () algoritması oldukça zayıftı]
array_rand() dizisini alır ve bir ya da daha fazla sayıda gelişigüzel seçilmiş girişleri döndürür. () Array_rand için avantaj bozulmadan orijinal diziyi bırakıyor olması.
shuffle dizisi anahtarlarını etkiler ve referans parametresini kullanır. shuffle PHP'nin eski sürümleri randomizasyon açısından zayıf olması için kullanılır ama bu gerçek artık.
array_rand bozulmadan orijinal diziyi bırakır ve size geri dönmek isteyen unsurların sayısını seçmek için izin vermek için isteğe bağlı bir parametre vardır.
$no parametresi değiştirerek ben hem işlev performanslarını test için kod parçacığını aşağıdaki çalıştı. Hatta büyük dizilerde hiçbir fazla differrence yoktur. 1x10 -5 ve 5x10 saniye -5 arasındaki Çoğu zaman
$time_start = microtime(true);
$rand_keys = array_rand($myArray, $no);
echo (microtime(true)-$time_start)."\n";
$time_start = microtime(true);
shuffle($myArray);
echo (microtime(true)-$time_start)."\n";