Array
Dalam banyak aplikasi Web, seringkali kita membutuhkan
sebuah variabel yang mampu menyimpan beberapa nilai sekaligus secara
terorganisir, sehingga lain saat kita dapat memperoleh
kembali nilai-nilai tersebut dengan mudah dan dalam bentuk yang teratur dan
terorganisir pula. Tidak, bukan database yang saya maksud, karena saya sedang
bicara variabel, dan database bukan
variabel. Mengapa ini sangat penting? Karena dalam
banyak kasus kita hanya membutuhkan penyimpan nilai sementara yang terorganisir
dengan baik, dan database sangat mahal untuk melakukan hal tersebut. Bayangkan
tentang koneksi, query dan seterusnya yang akan
memperlambat proses apabila kita menggunakan database.
Di sinilah kita membutuhkan array, sebuah
tipe variabel yang mampu menyimpan beberapa nilai sekaligus bahkan dalam tipe
berbeda yang terorganisir dengan baik. Sehingga dalam bahasa pemrograman
manapun—termasuk PHP tentunya—Anda akan senantiasa
menemukan array sebagai salah satu tipe variabelnya. Karena—maaf saya
menggunakan bahasa Inggris—
array is powerful.
Array, Apa dan Mengapa
Array di PHP adalah tipe variabel spesial, karena dengan
array kita dapat mengakses sekumpulan nilai dengan menggunakan satu nama variabel. Mekanisme pengaksesan ini diatur dalam bentuk
pemetaan (mapping) dari sekumpulan nilai (values) ke sekumpulan
kunci (keys) atau indeks. Sebagai contoh, variabel array $hacker dapat memetakan 1, 2 dan 3
masing-masing ke "Eric S Raymond", "Richard Stallman" dan
"Bruce Perens", sehingga dapat dinyatakan sebagai:
$hacker[1] = "Eric S Raymond";
$hacker[2] = "Richard Stallman";
$hacker[3] = "Bruce Perens";
di
mana ekspresi 1, 2 dan 3 adalah indeks, sementara "Eric S Raymond",
"Richard Stallman" dan "Bruce Perens" adalah
nilai-nilainya.
Array
akan sangat berguna manakala kita mengolah sekumpulan
data atau nilai dengan identitas serupa. Sebagai ilustrasi, katakanlah kita
memiliki data berupa nama hacker dan nama cracker.
Jika tidak menggunakan array, maka yang terbaik yang bisa kita lakukan adalah
dengan menyatakan seperti berikut:
$hacker_1 = "Eric S Raymond";
$hacker_2 = "Richard Stallman";
$hacker_3 = "Bruce Parens";
$cracker_1 = "FALLEN";
$cracker_2 = "n3wb13";
$cracker_3 = "Neur0n";
Jika
kita perlu mencetak keenam data tersebut, maka cara
berikut bisa digunakan:
print "Nama hacker ke 1: $hacker_1 <br>";
print "Nama hacker ke 2: $hacker_2 <br>";
print "Nama hacker ke 3: $hacker_3 <br>";
print "Nama cracker ke 1: $cracker_1 <br>";
print "Nama cracker ke 2: $cracker_2 <br>";
print "Nama cracker ke 3: $cracker_3 <br>";
Cara seperti ini mungkin efektif tetapi sayangnya jauh dari
efisien. Mengapa? karena
jika jumlah data hacker dan cracker di atas sampai puluhan bahkan ratusan, maka
bayangkan berapa banyak Anda harus mengetik perintah tersebut. Belum lagi,
webserver harus melakukan parsing dari ratusan baris yang akan
memperlambat keseluruhan proses. Tidak percaya? Silakan dicoba sendiri.
Dengan array, Anda dapat melakukan hal di atas dengan lebih baik
efektif dan efisien. Untuk 900 data hacker dan cracker misalnya, Anda
cukup melakukan iterasi seperti berikut:
for ($k=0;$k<900;$k++)
{
print "Nama hacker ke $k: $hacker[$k] <br>";
}
for ($k=0;$k<900;$k++)
{
print "Nama cracker ke $k: $cracker[$k] <br>";
}
Singkat, sederhana, tetapi ampuh. Selain
itu, banyaknya fungsi PHP untuk memanipulasi array membuat tipe variabel ini
sangat membantu kerja kita dalam membuat aplikasi web. Kita akan membahas beberapa fungsi PHP untuk memanipulasi array
ini pada bagian berikutnya.
Inisialisasi dan Modifikasi Array
Untuk
menginisialisasi sebuah array digunakan fungsi array(). Data hacker di atas misalnya dapat dibuat sebagai array
dengan:
$hacker = array("Eric S Raymond", "Richard Stallman",
"Bruce Perens");
Skrip
ini akan menginisialisasi variabel $hacker
dengan $hacker[0],
$hacker[1] dan $hacker[2] masing-masing bernilai
"Eric S Raymond", "Richard Stallman", dan "Bruce
Perens". Cara lain untuk ini adalah sebagai
berikut:
$hacker = array(0 => "Eric S Raymond",
1 => "Richard Stallman",
2 => "Bruce Perens");
Cara
pertama secara default akan menetapkan indeks secara berurutan
mulai dari 0, sementara cara kedua kita sendiri yang menetapkannya. Anda bisa
saja melakukan hal berikut:
$hacker = array(0 => "Eric S Raymond",
1 => "Richard Stallman",
3 => "Bruce Perens");
yang sama dengan:
$hacker = array("Eric S Raymond", "Richard Stallman",
3 => "Bruce Perens");
Dan
jika dicetak dengan skrip berikut:
for ($k=0;$k<=3;$k++)
{
print "\$hacker[$k] berisi: $hacker[$k]";
}
akan menghasilkan keluaran:
$hacker[0] berisi: Eric S Raymond
$hacker[1] berisi: Richard Stallman
$hacker[2] berisi:
$hacker[3] berisi: Bruce Perens
Untuk
memodifikasi isi array Anda dapat menetapkan nilai secara eksplisit dari
elemen-elemen array. Sebagai contoh untuk variabel $hacker di atas, elemen dengan indeks 2 yang masih kosong
dapat diisi secara langsung dengan:
$hacker[2] = "Rasmus Lerdorf";
jika dicetak akan menghasilkan:
$hacker[0] berisi: Eric S Raymond
$hacker[1] berisi: Richard Stallman
$hacker[2] berisi: Rasmus Lerdorf
$hacker[3] berisi: Bruce Perens
Sebenarnya,
dengan sifat PHP yang weakly typed, Anda dapat mendeklarasikan array secara eksplisit
sebagaimana kita memodifikasi elemen array di atas. Katakanlah jika variabel $location belum terdeklarasi sebelumnya,
kita dapat mendeklarasikan $location
sebagai array dengan:
$location[0] = "Pennsylvania";
$location[1] = "Manhattan";
Anda
juga dapat melakukannya dengan memanfaatkan sifat indeks array PHP yang
melakukan increment tiap kali dideklarasikan dengan indeks kosong seperti $location[],
sehingga deklarasi berikut:
$location[] = "Daly City";
$location[] = "Berkeley";
akan mengisi $location[2]
dan $location[3] dengan "Daly
City" dan "Berkeley".
Perlu
diperhatikan di sini, deklarasi array secara eksplisit tidak bisa dikatakan
sebagai inisialisasi, karena ia hanya mengakses satu
elemen dari array, sehingga penambahan nilai pada indeks 2 seperti di atas,
tidak sama dengan:
$hacker = array(2 => "Rasmus Lerdorf");
Tidak percaya? Silakan coba sendiri, lalu
cetak tiap elemen arraynya.
Array Asosiatif
Variabel $hacker dan
$location di atas memiliki
karakteristik array pada umumnya, yaitu indeks berupa angka sehingga memudahkan
untuk dilakukan iterasi. Hal ini, seperti
diilustrasikan di atas, sangat membantu kita dalam banyak aplikasi.
Sebagai contoh, jika kita ingin menggabungkan data hacker beserta lokasinya
dari variabel $hacker dan $location, dengan mudah dapat kita lakukan
iterasi sebagai berikut:
for ($k=0;$k<=3;$k++)
{
print "$hacker[$k] tinggal di kota $location[$k]";
}
yang menghasilkan keluaran seperti terlihat pada
Gambar 1.
Anda juga dapat menggunakan fungsi
count() untuk menghitung jumlah elemen array, sehingga cara
berikut lebih fleksibel:
Gb 1. Mencetak array asosiatif
$pjg = count($hacker);
for ($k=0;$k<$pjg;$k++)
{
print "$hacker[$k] tinggal di kota $location[$k]";
}
Array dengan indeks berupa angka seperti $hacker dan $location di atas disebut juga dengan number-indexed
array. Disebut demikian karena ada array jenis lain
yang memiliki indeks bukan angka melainkan string yang disebut dengan string-indexed
array atau lebih dikenal dengan array asosiatif atau hash.
Array
asosiatif sangat berguna khususnya dalam mengolah dua grup data yang memiliki
relasi satu sama lain. Sebagai contoh, data hacker dan
lokasi tempat tinggalnya yang sebelumnya dengan number-indexed array
harus dibuat dalam dua variabel $hacker
dan $location, dengan array
asosiatif dapat dibuat menjadi hanya satu variabel, di mana indeksnya berupa kota tempat tinggal, sementara
nilainya adalah nama hacker bersangkutan. Inisialisasinya masih sama yaitu
menggunakan array() seperti berikut:
$hacker = array( "Pennsylvania" => "Eric S Raymond",
"Manhattan" => "Richard Stallman",
"Daly City" => "Rasmus Lerdorf",
"Berkeley" => "Bruce Perens" );
Array
asosiatif dapat diakses secara langsung menggunakan ekspresi seperti $hacker["Pennsylvania"] atau $hacker['Pennsylvania'], di mana Pennsylvinia adalah indeksnya (yang berupa string).
Sehingga $hacker['Pennsylvania'] akan bernilai "Eric S
Raymond" dan seterusnya.
Pemilihan
kutip tunggal ('..')
atau kutip ganda ("..")
pada indeks array asosiatif adalah semata-mata pertimbangan kecepatan. Walaupun
keduanya sama-sama valid, namun sebagaimana dijelaskan pada tutorial
sebelumnya, tanda kutip ganda akan membuat PHP mencari
variabel di dalam kutip ganda tersebut (dengan mendeteksi tanda $) untuk diganti dengan nilai sebenarnya
yang membuat eksekusi lebih lambat. Oleh karena itu, saya hanya akan menggunakan kutip tunggal untuk indeks dari array
asosiatif.
Dengan
indeks berupa string, array asosiatif memang tidak dapat diiterasi seperti
sebelumnya menggunakan for,
namun Anda dapat melakukan iterasi yang serupa dengan menggunakan sintaks foreach seperti:
foreach ($hacker as $kota=>$nama)
{
print "$nama tinggal di kota $kota";
}
yang akan mencetak keluaran yang sama seperti
Gambar 1.
foreach
sebagaimana
for adalah
language
construct (bukan fungsi).
foreach($array as
$keys=>$values) akan melakukan iterasi terhadap
$array lalu menetapkan indeks beserta
nilainya dari tiap elemen dalam pasangan
$key=>$value,
untuk kasus di atas tiap elemen array
$hacker
dinyatakan dalam pasangan variabel
$kota=>$nama, kemudian variabel
$kota dan
$nama ini dapat diakses di dalam loop.
Multidimensional Array
Bukan programer namanya kalau tidak banyak maunya. Jika PHP dapat menyediakan array dengan indeks angka atau string,
bagaimana kalau keduanya? atau kombinasi dari
keduanya?
Dan bukan PHP namanya kalo begini saja tidak bisa. PHP tidak hanya mampu menyediakan array dengan indeks gabungan
angka dan string, bahkan lebih dari dua indekspun bisa. Array jenis ini disebut multidimensional array. Untuk
menginisialisasi multidimensional array caranya serupa dengan sebelumnya yaitu
menggunakan fungsi array() seperti berikut:
$hacker = array( array( "nama" => "Eric S Raymond",
"kota" => "Pennsylvania",
"url" => "http://www.tuxedo.org/~esr"),
array( "nama" => "Richard Stallman",
"kota" => "Manhattan",
"url" => "http://www.stallman.org"),
array( "nama" => "Bruce Perens",
"kota" => "Berkeley",
"url" => "http://www.perens.com"),
array( "nama" => "Rasmus Lerdorf",
"kota" => "Daly City",
"url" => "http://lerdorf.com"));
Ya,
array di dalam array, sesederhana itu. Dengan variabel
$hacker seperti ini, kita dapat membuat
keluaran
Gambar 1 lebih lengkap dengan link ke situs pribadi hacker
bersangkutan, dengan cara berikut:
$pjg_array = count($hacker);
for ($k=0;$k<$pjg_array;$k++)
{
print "<a href=\"{$hacker[$k]['url']}\">",
$hacker[$k]['nama'],
"</a> tinggal di kota {$hacker[$k]['kota']}";
}
keluarannya terlihat pada
Gambar 2. Perhatikan penggunaan
tanda kurung kurawal (
{..})
untuk menyertakan variabel array
$hacker
kedua di atas, ini harus dilakukan karena jika Anda menghilangkannya maka PHP
akan menganggap array
$hacker
tidak diekspresikan secara lengkap (indeks yang menggunakan tanda kutip akan
dianggap sebagai string baru bukan bagian dari array) sehingga akan muncul
pesan error. Jadi tanda kurung kurawal di sini bisa dikatakan
sebagai penyempurna ekspresi array. Anda dapat juga melakukan hal yang sama tanpa kurung kurawal yaitu dengan mengeluarkan ekspresi
array tersebut dari kutip ganda (seperti pada kasus ekspresi yang pertama).
Mengolah
Form Dengan Array
Untuk
melengkapi pembahasan mengenai array ini, saya akan
mencontohkan penggunaan array pada aplikasi Web, yaitu dalam mengolah isian
form. Di sini akan digunakan beberapa fungsi
manipulasi array di PHP yang sering dipakai, jadi siapkan manual PHP Anda.
Katakanlah kita membutuhkan informasi berupa biodata pengunjung
situs melalui form. Isian seperti nama, alamat,
tanggal lahir dan lain-lain yang hanya berupa field satu isian masih mudah
untuk diolah. Yang menjadi masalah adalah manakala kita harus
mengolah data isian dari multiple field seperti isian tentang jenis pekerjaan
yang diinginkan misalnya seperti terlihat pada
Gambar 3.
Untuk
ini, Anda dapat saja menggunakan kode HTML berikut:
<form action="form.php" method="get">
Pekerjaan yang Anda inginkan : <br>
<select name="pekerjaan" multiple>
<option value="wm">Web Master</option>
<option value="sa">System Analyst</option>
<option value="wd">Web Designer</option>
<option value="wp">Web Programmer</option>
</select>
<br>
<input type="submit" value="ok">
</form>
Jika
pengunjung memilih pilihan System
Analyst lalu menekan tombol ok
maka variabel $pekerjaan dapat
diperoleh pada halaman form.php
dengan nilai "sa". Namun jika pengunjung memberikan masukan lebih
dari satu, misalkan ia memilih sebagai system analyst
dan web programmer maka $pekerjaan
akan bernilai "wp". Mengapa? karena $pekerjaan
akan diassign dua kali yaitu $pekerjaan="sa"
lalu $pekerjaan="wp"
(kalau tidak percaya lihat URL yang tertera di browser Anda) sehingga di form.php variabel $pekerjaan ini hanya menyimpan nilai
terakhir yaitu "wp". Hal ini jelas tidak kita
inginkan.
Dengan
array, masalah ini dapat diatasi yaitu dengan sedikit mengubah skrip di atas
menjadi:
<form action="form.php" method="get">
Pekerjaan yang Anda inginkan : <br>
<select name="pekerjaan[]" multiple>
<option value="wm">Web Master</option>
<option value="sa">System Analyst</option>
<option value="wd">Web Designer</option>
<option value="wp">Web Programmer</option>
</select>
<br>
<input type="submit" value="ok">
</form>
Dengan
isian yang sama seperti di atas, maka variabel $pekerjaan[] akan diassign dua kali yaitu $pekerjaan[]="sa" dan $pekerjaan[]="wp". Hanya saja kali ini variabel $pekerjaan
berupa array dengan elemen pertama bernilai "sa" dan elemen kedua
bernilai "wp". Sehingga jika di halaman form.php kita berikan skrip berikut:
<?php
$pjg_array=count($pekerjaan);
for ($k=0;$k<$pjg_array;$k++)
{
$cnt = $k+1;
print "Kode pekerjaan pilihan ke-$cnt : $pekerjaan[$k]";
}
?>
Gb 4. Output pengolah form multiselek
Komentar
Posting Komentar