0% menganggap dokumen ini bermanfaat (0 suara)
217 tayangan18 halaman

2.2 Struktur Data Array PHP Lanjut

Dokumen tersebut membahas struktur array PHP. Ada tiga jenis array utama yaitu array numerik, array asosiatif, dan array multidimensi. Array PHP sangat dinamis dan fleksibel sehingga dapat digunakan untuk berbagai struktur data seperti list, tabel hash, dictionary, dan lainnya."

Diunggah oleh

ricki.yanuar.ry
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
217 tayangan18 halaman

2.2 Struktur Data Array PHP Lanjut

Dokumen tersebut membahas struktur array PHP. Ada tiga jenis array utama yaitu array numerik, array asosiatif, dan array multidimensi. Array PHP sangat dinamis dan fleksibel sehingga dapat digunakan untuk berbagai struktur data seperti list, tabel hash, dictionary, dan lainnya."

Diunggah oleh

ricki.yanuar.ry
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 18

STRUKTUR ARRAY PHP

1 Memahami Array dan ruang lingkupnya


Array PHP adalah salah satu tipe data yang paling banyak digunakan dalam

PHP. Sebagian besar waktu kita menggunakannya tanpa

mempertimbangkan dampak array PHP dalam kode atau aplikasi yang kita

kembangkan. Sangat mudah digunakan dan bersifat dinamis; kita senang

menggunakan array PHP untuk hampir semua tujuan. Kadang-kadang kita

bahkan tidak ingin mengeksplorasi apakah ada solusi lain yang tersedia yang

dapat digunakan sebagai pengganti array PHP. Dalam bab ini, kita akan

mengeksplorasi sisi positif dan negatif dari array PHP, bersama dengan cara

menggunakan array dalam implementasi struktur data yang berbeda

bersama dengan peningkatan kinerja. Kita akan mulai dengan menjelaskan

berbagai jenis array di PHP diikuti dengan membuat array berukuran tetap.

Kemudian kita akan melihat jejak memori untuk elemen array PHP dan

bagaimana kita dapat meningkatkannya bersama dengan beberapa

implementasi struktur data.

Array PHP sangat dinamis dan fleksibel sehingga kita harus memikirkan

apakah itu array biasa, array asosiatif, atau array multidimensi, seperti dalam

beberapa bahasa lain. Kita tidak perlu menentukan ukuran dan tipe data dari

array yang akan kita gunakan. Bagaimana PHP bisa melakukan itu,

sementara bahasa lain seperti C dan Java tidak bisa melakukan hal yang
sama? Jawabannya sangat sederhana: konsep array dalam PHP sebenarnya

bukanlah array yang sebenarnya, melainkan sebuah HashMap. Dengan kata

lain, array PHP bukanlah konsep array sederhana seperti pada bahasa lain.

Array sederhana akan terlihat seperti ini:

Tapi, kita pasti bisa melakukannya dengan PHP. Mari kita periksa dengan

sebuah contoh:

$array = [1,2,3,4,5];

Baris ini menunjukkan bagaimana array tipikal akan terlihat. Jenis data

serupa memiliki indeks berurutan (mulai dari 0 hingga 4) untuk mengakses

nilai. Jadi siapa bilang array PHP bukan array biasa? Mari kita telusuri

beberapa contoh lagi. Pertimbangkan hal berikut:

$mixedArray = [];
$mixedArray[0] = 200;
$mixedArray['name'] = "Mixed array";
$mixedArray[1] = 10.65;
$mixedArray[2] = ['I', 'am', 'another', 'array'];

Ini adalah array PHP yang kita gunakan setiap hari; kita tidak menentukan

ukuran dan kita menyimpan bilangan bulat, angka floating point, string, dan
bahkan array lain. Apakah kedengarannya aneh atau hanya kekuatan super

PHP? Kita dapat melihat definisi dari http://php.net.

Array di PHP sebenarnya adalah map yang diurutkan. Map adalah tipe yang

mengaitkan nilai ke kunci. Jenis ini dioptimalkan untuk beberapa kegunaan

yang berbeda; dan dapat diperlakukan sebagai array, list (vektor), tabel hash

(implementasi map), dictionary, koleksi, stack, queue, dan mungkin lainnya.

Karena nilai array dapat berupa array lain, tree dan array multidimensi juga

dimungkinkan.

Jadi array PHP memiliki kekuatan super nyata dan dapat digunakan untuk

semua struktur data yang mungkin seperti list/vektor, tabel hash, dictionary,

koleksi, stack, queue, linked list berganda, dan sebagainya. Tampaknya array

PHP telah dibangun sedemikian rupa sehingga dioptimalkan untuk semuanya

atau tidak dioptimalkan untuk apa pun. Kita akan membehasnya dalam bab

ini.

Jika kita ingin mengkategorikan array, maka pada dasarnya ada tiga jenis

array:

• Array numerik

• Array asosiatif

• Array multidimensi

Kita akan mempelajari setiap jenis array dengan beberapa contoh dan
penjelasan.

1.1 Array numerik


Array numerik tidak berarti hanya menyimpan data numerik. Bahkan, itu

berarti indeks akan menjadi angka saja. Dalam PHP mereka bisa berurutan

atau tidak berurutan tetapi mereka harus numerik. Dalam array numerik, nilai

disimpan dan diakses secara linier. Berikut adalah beberapa contoh array

numerik PHP:

$array = [10,20,30,40,50];
$array[] = 70;
$array[] = 80;
$arraySize = count($array);
for($i = 0;$i<$arraySize;$i++) {
echo "Position ".$i." holds the value ".$array[$i]."\n";
}

Kode diatas akan memiliki output berikut:

Position 0 holds the value 10


Position 1 holds the value 20
Position 2 holds the value 30
Position 3 holds the value 40
Position 4 holds the value 50
Position 5 holds the value 70
Position 6 holds the value 80

Ini adalah contoh yang sangat sederhana di mana kita memiliki array yang
ditentukan dan indeks dibuat secara otomatis dari 0 dan ditambah dengan

nilai array. Ketika kita menambahkan elemen baru di dalam array

menggunakan $array[], itu sebenarnya menaikkan indeks dan memberikan

nilai dalam indeks baru. Itu sebabnya nilai 70 memiliki indeks 5 dan 80

memiliki indeks 6.

Jika data kita berurutan, kita selalu dapat menggunakan perulangan for tanpa

masalah. Ketika kita mengatakan berurutan, kita tidak bermaksud hanya

0,1,2,3....,n. Bisa 0,5,10,15,20,......,n dimana n adalah kelipatan 5. Atau bisa

juga 1,3,5,7,9......,n di mana n ganjil. Kita dapat membuat ratusan urutan

tersebut untuk membuat array numerik.

$array = [];
$array[10] = 100;
$array[21] = 200;
$array[29] = 300;
$array[500] = 1000;
$array[1001] = 10000;
$array[71] = 1971;
foreach($array as $index => $value) {
echo "Position ".$index." holds the value ".$value."\n";
}

Jika kita melihat indeksnya, mereka tidak berurutan. Mereka memiliki indeks

acak seperti 10 diikuti oleh 21, 29, dan seterusnya. Bahkan pada akhirnya

kita memiliki indeks 71, yang jauh lebih kecil dari yang sebelumnya 1001.
Jadi, haruskah indeks terakhir menunjukkan antara 29 dan 500? Berikut

adalah outputnya:

Position 10 holds the value 100


Position 21 holds the value 200
Position 29 holds the value 300
Position 500 holds the value 1000
Position 1001 holds the value 10000
Position 71 holds the value 1971

Beberapa hal yang perlu diperhatikan di sini:

Kita mengulangi array dengan cara Kita memasukkan data. Tidak ada

penyortiran internal indeks sama sekali, meskipun semuanya numerik.

Fakta menarik lainnya adalah ukuran array $array hanya 6. Tidak 1002

seperti C++, Java, atau bahasa lain di mana kita perlu menentukan ukuran

array sebelum menggunakannya, dan indeks maks dapat n- 1 di mana n

adalah ukuran array.

1.2 Array asosiatif


Array asosiatif diakses oleh kunci yang dapat berupa string apa pun. Dalam

array asosiatif, nilai disimpan terhadap kunci, bukan indeks linier. Kita dapat

menggunakan array asosiatif untuk menyimpan semua jenis data, seperti

halnya array numerik. Mari kita membuat array siswa di mana kita akan
menyimpan informasi siswa:

$infoSiswa = [];
$infoSiswa['Name'] = "Priyadi";
$infoSiswa['Age'] = 19;
$infoSiswa['Class'] = 6;
$infoSiswa['RollNumber'] = 71;
$infoSiswa['Contact'] = "[email protected]";

foreach($infoSiswa as $key => $value) {


echo $key.": ".$value."<br/>";
}

Hasilnya akan seperti berikut :

Name: Priyadi
Age: 19
Class: 6
RollNumber: 71
Contact: [email protected]

Di sini kita menggunakan setiap kunci untuk menyimpan satu bagian data.

Kita dapat menambahkan kunci sebanyak yang kita butuhkan tanpa masalah.

Ini memberi kita fleksibilitas untuk mewakili struktur data yang mirip dengan

struktur map dan dictionary menggunakan array asosiatif PHP.


1.3 Array multi dimensi
Array multidimensi berisi beberapa array di dalamnya. Dengan kata lain, ini

adalah array dari array(s). Dalam konteks ini, kita akan menggunakan array

multidimensi dalam contoh yang berbeda karena mereka adalah salah satu

cara yang paling populer dan efisien untuk menyimpan data untuk graf dan

struktur data tipe tree lainnya. Mari kita pelajari array multidimensi PHP

menggunakan contoh:

$players = [];
$players[] = ["Name" => "Ronaldo", "Age" => 31, "Country" =>
"Portugal", "Team" => "Real Madrid"];
$players[] = ["Name" => "Messi", "Age" => 27, "Country" =>
"Argentina", "Team" => "Barcelona"];
$players[] = ["Name" => "Neymar", "Age" => 24, "Country" =>
"Brazil", "Team" => "Barcelona"];
$players[] = ["Name" => "Rooney", "Age" => 30, "Country" =>
"England", "Team" => "Man United"];
foreach($players as $index => $playerInfo) {
echo "Info of player # ".($index+1)."\n";
foreach($playerInfo as $key => $value) {
echo $key.": ".$value."<br/>";
}
echo "<br/>";
}

Contoh yang baru saja kita lihat adalah contoh array dua dimensi. Pada

contoh tersebut kita menggunakan dua loop foreach untuk mengulangi array

dua dimensi. Berikut adalah output dari kode:


Info of player # 1
Name: Ronaldo
Age: 31
Country: Portugal
Team: Real Madrid
Info of player # 2
Name: Messi
Age: 27
Country: Argentina
Team: Barcelona
Info of player # 3
Name: Neymar
Age: 24
Country: Brazil
Team: Barcelona
Info of player # 4
Name: Rooney
Age: 30
Country: England
Team: Man United

Kita dapat membuat array n-dimensi menggunakan PHP sesuai kebutuhan

kita, tetapi kita harus ingat satu hal: semakin banyak dimensi yang kita

tambahkan, semakin kompleks strukturnya. Kita sebagai manusia biasanya

memvisualisasikan tiga dimensi, jadi untuk memiliki lebih dari array tiga

dimensi, kita harus memiliki pemahaman yang kuat tentang cara kerja array
dalam berbagai dimensi.

Kita dapat menggunakan array numerik dan array asosiatif sebagai array

tunggal di PHP. Tetapi dalam kasus seperti itu, kita harus sangat berhati-hati

untuk memilih cara yang tepat untuk melakukan iterasi melalui elemen array.

Dalam kasus seperti itu, foreach akan menjadi pilihan yang lebih baik

daripada for atau while loop.

2 Array multi dimensi sebagai representasi struktur data


Dalam bab-bab selanjutnya, kita akan membahas banyak tentang struktur

data dan algoritma yang berbeda. Salah satu struktur data utama yang akan

kita fokuskan adalah graf. Kita sudah mengetahui definisi struktur data graf.

Sebagian besar waktu kita akan menggunakan array multidimensi PHP untuk

mewakili data tersebut sebagai matriks ketetanggaan. Mari kita perhatikan

diagram graf berikut:

Sekarang jika kita menganggap setiap node dari graf sebagai nilai dari

sebuah array, kita dapat merepresentasikan node seperti berikut:

$nodes = ['A', 'B', 'C', 'D', 'E'];


Kode diatas hanya akan memberi kita nama node. Kita tidak dapat

menghubungkan atau membuat hubungan antar node. Untuk melakukan itu,

kita perlu membangun array dua dimensi di mana nama node akan menjadi

kunci, dan nilai akan menjadi 0 atau 1 berdasarkan interkonektivitas dua

node. Karena tidak ada arah yang diberikan dalam graf, kita tidak tahu

apakah A terhubung ke C atau jika terhubung ke A. Jadi kita akan

menganggap keduanya terhubung satu sama lain.

Pertama, kita perlu membuat array untuk graf dan menginisialisasi setiap

node dari array dua dimensi sebagai 0.

Kode berikut akan melakukannya dengan tepat:

$graph = [];
$nodes = ['A', 'B', 'C', 'D', 'E'];
foreach ($nodes as $xNode) {
foreach ($nodes as $yNode) {
$graph[$xNode][$yNode] = 0;
}
}

Mari kita mencetak array menggunakan kode berikut sehingga kita melihat

tampilan sebenarnya sebelum mendefinisikan konektivitas antar node:

foreach ($nodes as $xNode) {


foreach ($nodes as $yNode) {
echo $graph[$xNode][$yNode] . "\t";
}
echo "<br/>";
}

Karena tidak ada koneksi antara node yang telah ditentukan, semua sel

menunjukkan 0. Jadi outputnya terlihat seperti ini:

0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

Berikutnya kita akan mendefinisikan konektivitas node sedemikian rupa

sehingga koneksi antara dua node akan dinyatakan sebagai nilai 1, seperti

kode berikut:

$graph["A"]["B"] = 1;
$graph["B"]["A"] = 1;
$graph["A"]["C"] = 1;
$graph["C"]["A"] = 1;
$graph["A"]["E"] = 1;
$graph["E"]["A"] = 1;
$graph["B"]["E"] = 1;
$graph["E"]["B"] = 1;
$graph["B"]["D"] = 1;
$graph["D"]["B"] = 1;

Karena tidak ada arah yang diberikan dalam diagram graf, kita akan
menganggapnya sebagai graf tidak berarah dan karenanya kita menetapkan

dua nilai ke 1 untuk setiap koneksi. Untuk koneksi antara A dan B, kita

menyetel keduanya $graph["A"]["B"] dan $graph["B"]["A"] ke 1. Kita akan

mempelajari lebih lanjut tentang mendefinisikan konektivitas antara node dan

mengapa kita melakukannya di bab-bab selanjutnya. Untuk saat ini kita

hanya berfokus pada bagaimana menggunakan array multidimensi untuk

struktur data. Kita dapat mencetak ulang matriks dan kali ini, hasilnya terlihat

seperti ini:

0 1 1 0 1
1 0 0 1 1
1 0 0 0 0
0 1 0 0 0
1 1 0 0 0

3 Membuat array ukuran tetap dengan metode SplFixedArray


Sejauh ini, kita telah mempelajari array PHP dan kita tahu, kita tidak

mendefinisikan ukuran array. Array PHP dapat tumbuh atau menyusut sesuai

permintaan kita. Fleksibilitas ini disertai dengan ketidaknyamanan yang besar

terkait penggunaan memori. Kita akan mempelajarinya di bagian ini. Untuk

saat ini, mari kita fokus pada pembuatan array ukuran tetap menggunakan

SPLlibrary.

Mengapa kita membutuhkan array ukuran tetap? Apakah ada keuntungan

tambahan? Jawabannya adalah ketika kita tahu bahwa kita hanya


membutuhkan sejumlah elemen dalam array, kita dapat menggunakan array

tetap untuk mengurangi penggunaan memori. Sebelum masuk ke analisis

penggunaan memori, mari kita lihat beberapa contoh penggunaan metode

SplFixedArray:

$array = new SplFixedArray(10);


for ($i = 0; $i < 10; $i++)
$array[$i] = $i;
for ($i = 0; $i < 10; $i++)
echo $array[$i] . "<br/>";

Pertama, kita membuat objek SplFixedArray baru dengan ukuran yang

ditentukan 10. Baris yang tersisa sebenarnya mengikuti prinsip yang sama

yang kita gunakan dalam penetapan dan pengambilan nilai array PHP biasa.

Jika kita ingin mengakses indeks yang berada di luar jangkauan, itu akan

mengeluarkan sebuah pengecualian / exception seperti berikut :

PHP Fatal error: Uncaught RuntimeException: Index invalid or


out of range

Perbedaan mendasar antara array PHP dan SplFixedArray adalah:

• SplFixedArray harus memiliki ukuran tetap yang ditentukan.

• Indeks SplFixedArray harus bilangan bulat dan dalam kisaran 0 hingga

n, di mana n adalah ukuran array yang kita definisikan.

Metode SplFixedArray bisa sangat berguna ketika kita memiliki banyak array

yang ditentukan dengan ukuran yang diketahui atau memiliki batas atas
untuk ukuran maksimum array yang diperlukan. Tetapi jika kita tidak

mengetahui ukuran array, maka lebih baik menggunakan array PHP.

4 Perbandingan kinerja antara array PHP biasa dan


SplFixedArray
Salah satu pertanyaan kunci yang ditemui adalah, mengapa kita harus

menggunakan SplFixedArray daripada array PHP? Kita sekarang siap untuk

mengeksplorasi jawabannya. Kita menemukan konsep bahwa array PHP

sebenarnya bukan array melainkan map hash. Mari kita jalankan kode contoh

kecil dalam versi PHP 5.x untuk melihat penggunaan memori dari array PHP.

Mari kita buat array dengan 100.000 integer PHP unik. Karena saya

menjalankan mesin 64 bit, saya berharap setiap bilangan bulat mengambil

masing-masing 8 byte. Jadi kita akan memiliki sekitar 800.000 byte memori

yang dikonsumsi untuk array. Berikut kodenya:

$startMemory = memory_get_usage();
$array = range(1,100000);
$endMemory = memory_get_usage();
echo ($endMemory - $startMemory)." bytes";

Jika kita menjalankan kode ini di command prompt kita, kita akan melihat

output sebesar 14.649.040 byte. Penggunaan memori hampir 18,5 kali lebih

banyak dari yang kita rencanakan. Itu berarti, untuk setiap elemen dalam

array, overhead 144 byte (18 * 8 byte) untuk satu array PHP. Sekarang, di

mana ini? 144 byte tambahan berasal dan mengapa PHP menggunakan
begitu banyak memori ekstra untuk setiap elemen array? Berikut adalah

penjelasan dari byte tambahan yang digunakan oleh array PHP:

Diagram ini menunjukkan bagaimana array PHP bekerja secara internal. Ini

menyimpan data dalam wadah untuk menghindari tabrakan dan untuk

mengakomodasi lebih banyak data. Untuk mengelola sifat dinamis ini, ia

mengimplementasikan linked list ganda dan tabel hash secara internal untuk

array. Akhirnya, membutuhkan banyak ruang memori ekstra untuk setiap

elemen individu dalam array. Berikut adalah rincian konsumsi memori setiap

elemen berdasarkan kode implementasi array PHP (kode C):


Untuk memahami struktur internal array PHP, kita perlu mempelajari secara

mendalam tentang internal PHP. Bacaan yang disarankan adalah:

https://nikic.github.io/2011/12/12/How-big-are-PHP-arrays-really-Hint-

BIG.html

Dengan versi PHP 7 yang baru, ada peningkatan yang sangat besar dalam

array PHP dan cara pembuatannya secara internal. Akibatnya, 144 byte

overhead pada setiap elemen telah turun menjadi 36 byte saja. Itu adalah

peningkatan besar dan ini berlaku untuk OS 32 bit dan 64 bit. Bagan

perbandingan, yang memiliki kisaran 100.000 item dalam larik, ditampilkan

sebagai berikut:

Anda mungkin juga menyukai