Array pada PHP

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).

Gb 2. Array multidimensi

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.

Gb 3. Form multiselek
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]";
    }
 
?>
Keluarannya terlihat pada Gambar 4.

Gb 4. Output pengolah form multiselek

Komentar