2.2 Struktur Data Array PHP Lanjut
2.2 Struktur Data Array PHP Lanjut
mempertimbangkan dampak array PHP dalam kode atau aplikasi yang 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
berbagai jenis array di PHP diikuti dengan membuat array berukuran tetap.
Kemudian kita akan melihat jejak memori untuk elemen array PHP dan
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
lain, array PHP bukanlah konsep array sederhana seperti pada bahasa lain.
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
nilai. Jadi siapa bilang array PHP bukan array biasa? Mari kita telusuri
$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
Array di PHP sebenarnya adalah map yang diurutkan. Map adalah tipe yang
yang berbeda; dan dapat diperlakukan sebagai array, list (vektor), tabel hash
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
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.
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";
}
Ini adalah contoh yang sangat sederhana di mana kita memiliki array yang
ditentukan dan indeks dibuat secara otomatis dari 0 dan ditambah dengan
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
$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:
Kita mengulangi array dengan cara Kita memasukkan data. Tidak ada
Fakta menarik lainnya adalah ukuran array $array hanya 6. Tidak 1002
seperti C++, Java, atau bahasa lain di mana kita perlu menentukan ukuran
array asosiatif, nilai disimpan terhadap kunci, bukan indeks linier. Kita dapat
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]";
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
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
kita, tetapi kita harus ingat satu hal: semakin banyak dimensi yang kita
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
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
Sekarang jika kita menganggap setiap node dari graf sebagai nilai dari
kita perlu membangun array dua dimensi di mana nama node akan menjadi
node. Karena tidak ada arah yang diberikan dalam graf, kita tidak tahu
Pertama, kita perlu membuat array untuk graf dan menginisialisasi setiap
$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
Karena tidak ada koneksi antara node yang telah ditentukan, semua sel
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
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
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
mendefinisikan ukuran array. Array PHP dapat tumbuh atau menyusut sesuai
saat ini, mari kita fokus pada pembuatan array ukuran tetap menggunakan
SPLlibrary.
SplFixedArray:
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
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
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
masing-masing 8 byte. Jadi kita akan memiliki sekitar 800.000 byte memori
$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
Diagram ini menunjukkan bagaimana array PHP bekerja secara internal. Ini
mengimplementasikan linked list ganda dan tabel hash secara internal untuk
elemen individu dalam array. Berikut adalah rincian konsumsi memori setiap
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
sebagai berikut: