Saya memiliki array yang disebut $ran = array(1,2,3,4);
Saya perlu mendapatkan nilai acak dari larik ini dan menyimpannya dalam variabel, bagaimana saya bisa melakukan ini?
Anda juga dapat melakukan hanya:
$k = array_rand($array);
$v = $array[$k];
Ini adalah cara untuk melakukannya ketika Anda memiliki array asosiatif.
array_rand
ini tidakarray_rand_value
array_rand()
menggunakan generator Twister Mersenne: rand () dengan alias mt_rand () dan srand () dengan alias mt_srand () . Dalam prakteknya sekarang sudah cukup baik.PHP menyediakan fungsi hanya untuk itu: array_rand ()
http://php.net/manual/en/function.array-rand.php
sumber
array_rand
fungsi kedua1
jadi tidak perlu menulisnya.Anda dapat menggunakan mt_rand ()
Ini berguna sebagai fungsi juga jika Anda membutuhkan nilainya
sumber
array_rand
tidakmt_rand
isset
bagian? Ini akan gagal untuk array asosiatif.mt_rand
daripadarand
dalam kasus ini tampaknya lebih memilih beberapa item daripada yang lainsumber
Anda dapat menggunakan fungsi array_rand untuk memilih kunci acak dari array Anda seperti di bawah ini.
atau Anda dapat menggunakan fungsi rand dan hitung untuk memilih indeks acak.
sumber
Berasal dari Laravel
Collection::random()
:Pemakaian:
Beberapa catatan:
$amount
harus kurang dari atau sama dengancount($array)
.array_rand()
tidak mengacak kunci (sejak PHP 5.2.10, lihat 48224 ), jadi item yang Anda pilih akan selalu dalam urutan asli. Gunakanshuffle()
setelahnya jika perlu.Dokumentasi:
array_rand()
,shuffle()
edit: Fungsi Laravel telah berkembang secara nyata sejak saat itu, lihat Laravel 5.4
Arr::random()
. Berikut ini sesuatu yang lebih rumit, berasal dari fungsi Laravel dewasa:Beberapa sorotan:
array_random($array, 1)
mengembalikan array dari satu item ( # 19826 )sumber
The
array_rand
Fungsi tampaknya memiliki distribusi yang tidak merata pada array besar, tidak setiap item array sama-sama mungkin untuk mendapatkan dijemput. Menggunakan shuffle pada larik dan kemudian mengambil elemen pertama tidak memiliki masalah ini:sumber
mt_rand()
mungkin lebih cocok untuk tugas tersebut.Pendekatan lain melalui flipping array untuk mendapatkan nilai langsung.
Potongan
array_rand
kembali kunci bukan nilai. Jadi, kami membalik nilai sebagai kuncinya.Catatan: Kunci PHP selalu merupakan kunci unik, jadi ketika array dibalik, nilai duplikat sebagai kunci akan ditimpa.
sumber
$array[array_rand($array)];
?array_flip
hapus duplikat sebagai kunci lalu berikan hasil ... Berarti tidak ada duplikat!atau, untuk larik khusus:
sumber
Dalam kasus saya, saya harus mendapatkan 2 nilai apa itu objek. Saya membagikan solusi sederhana ini.
sumber
Apakah pilihan Anda memiliki implikasi keamanan? Jika ya, gunakan
random_int()
danarray_keys()
. (random_bytes()
hanya untuk PHP 7, tetapi ada polyfill untuk PHP 5 ).Pemakaian:
Demo: https://3v4l.org/1joB1
sumber
Gunakan rand () untuk mendapatkan nomor acak untuk menggemakan kunci acak. Misalnya: 0 - 3
sumber
Satu baris:
$ran[rand(0, count($ran) - 1)]
sumber
Saya membutuhkan satu versi baris untuk larik pendek:
atau jika array diperbaiki:
sumber
On-liner:
sumber
Ini akan bekerja dengan baik dengan array sebaris. Selain itu, saya pikir semuanya lebih rapi dan lebih dapat digunakan kembali ketika dibungkus dalam suatu fungsi.
Pemakaian:
Di PHP <7.1.0,
array_rand()
gunakanrand()
, jadi Anda tidak ingin menggunakan fungsi ini untuk apa pun yang berhubungan dengan keamanan atau kriptografi. Pada PHP 7.1.0+, gunakan fungsi ini tanpa khawatir karenarand()
telah dialirimt_rand()
.sumber
Saya mendasarkan jawaban saya dari fungsi @ ÓlafurWaage. Saya mencoba menggunakannya tetapi mengalami masalah referensi ketika saya mencoba untuk mengubah objek pengembalian. Saya memperbarui fungsinya untuk lulus dan kembali dengan referensi. Fungsi barunya adalah:
Untuk konteks lebih lanjut, lihat pertanyaan saya di Passing / Returning referensi ke objek + mengubah objek tidak berfungsi
sumber
Cara sederhana untuk mendapatkan nilai Randdom dari Array .
sekarang setiap kali Anda akan mendapatkan warna yang berbeda dari Array .
sumber
Anda mendapatkan nomor acak dari larik sebagai berikut:
sumber