i (am) Blogger and U?

from X-periment to X-perience

Aplikasi Web: WebReview-Series 2

Web Review-Series 2 memiliki fitur-fitur yang sama persis dengan Web Review-Series 1 tapi dengan theme/template yang berbeda (theme yang dipakai pada versi ini adalah theme yang respons [...]

Aplikasi Web: Online Shop PRO 2

Toko Online Pro 2 memiliki fitur-fitur yang sama persis dengan Toko Online Pro 1 tapi dengan theme/template yang berbeda.

One-Page Portofolio / Gallery 1

One-Page Portofolio/Gallery adalah paket aplikasi web yang memfasilitasi Anda baik perseorangan maupun korporat yang ingin menampilkan/memajang portofolio/hasil karya/gallery kegiatan/p [...]

Aplikasi Web: Custom X

Aplikasi Web Custom X, software berbasis web dinamis dengan fitur utama adalah pembuatan SURVEY dan/atau POLLING dengan jumlah yang tidak dibatasi. Selain itu aplikasi ini juga memiliki [...]

Aplikasi Web: Pre-Order Online Shop

Pre-Order Online Shop adalah paket full-features aplikasi toko online yang dapat digunakan untuk menjalankan bisnis Anda secara online. Fasilitas unggulan yang terdapat pada aplikasi in [...]

One-Page Portofolio / Gallery 3

One-Page Portofolio / Gallery 3 memiliki fitur-fitur yang sama persis dengan One-Page Portofolio / Gallery 1 tapi dengan theme/template yang berbeda.

[Tips PHP] Nomor Undian tak Berulang

Category: Tips dan TrikDate:
Sunday, 05 May 2019

Kali ini saya akan membahas tentang kasus di mana kita butuh untuk membuat nomor undian tak berulang. Contoh kasusnya adalah misalkan ada nomor 1 s.d. 5 dan diambil 2 nomor secara acak tanpa berulang (artinya yg sudah dipilih tidak masuk dalam pemilihan berikutnya). Pengambilan secara acak ini pun bisa dibagi menjadi dua yakni program secara langsung memilih 2 nomor acak dan program dijalankan dua kali dan tiap kali dijalankan akan memilih satu nomor acak.

Pertama akan saya contohkan untuk mengambil 2 nomor acak secara langsung dalam satu kali eksekusi. Nomor akan diwakili dengan variabel $semua_nomor yang berisi array dengan komposisi seperti dalam komposisi array 1.

[php]
$semua_nomor = range(1,5);

#komposisi array 1
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)
[/php]


Berikut ini adalah skrip lengkap dan penjelasannya
[php]
$semua_nomor = range(1,5);

#awal
echo 'keadaan awal: ';
print_r($semua_nomor);
echo '
';

$jumlah_pilihan = 2;
$terpilih = array();

foreach(range(1,$jumlah_pilihan) as $i){
$index = array_keys($semua_nomor);
$index = $index[mt_rand(0, count($index) - 1)];
$terpilih[$index] = $index;
unset($semua_nomor[$index]);
}

#setelah dipilih
echo 'keadaan setelah dilakukan pemilihan: ';
print_r($semua_nomor);
echo '
';

#hasil yg dipilih [index array]
echo 'yang terpilih: ';
print_r($terpilih);
[/php]


Penggunaan range() di sini adalah untuk memudahkan membuat "dummy array" (misalkan Anda ingin membuat 200 array, tinggal gunakan range(1,200)).

array_keys() akan "menampung" index array bahkan ketika index array berbeda jenis, misalkan Anda punya array seperti ini
[php]
$arraykey = array_keys(['satu'=> 1, 'satu1'=> 11, 2 => 'dua', 22 => 'dua2', 0 => 0]);
#atau
$arraykey = array_keys(array('satu'=> 1, 'satu1'=> 11, 2 => 'dua', 22 => 'dua2', 0 => 0));
[/php]


Kalau Anda meng-echo [karena ini array maka gunakan print_r()] $arraykey akan didapatkan
[php]
Array
(
[0] => satu
[1] => satu1
[2] => 2
[3] => 22
[4] => 0
)
[/php]


Kembali ke penjelasan, selanjutnya adalah mt_rand() dipakai untuk melakukan random terhadap index array dari array yang dihasilkan oleh array_keys().

Variabel $index akan menyimpan hasil random yang dilakukan mt_rand(), dalam hal ini adalah indeks array dari $semua_nomor.

Indeks array kemudian disimpan dalam variabel $terpilih

Terakhir gunakan unset() terhadap $index yang sudah dipilih untuk `menghapusnya` (dengan cara ini perulangan tidak akan terjadi).

Salah satu hasil yang mungkin ketika skrip dieksekusi adalah:
[php]
keadaan awal: Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)

keadaan setelah dilakukan pemilihan: Array
(
[0] => 1
[1] => 2
[3] => 4
)

yang terpilih: Array
(
[4] => 4
[2] => 2
)
[/php]


No comments...
>> Comments closed. <<