Anda di halaman 1dari 31

STRUKTUR DATA

PHP ARRAY & LARAVEL


COLLECTION
Definisi
• Array pada PHP adalah struktur data yang digunakan untuk
menyimpan kumpulan data yang fleksibel. Artinya array pada PHP
dapat berisi elemen dengan tipe data yang berbeda, seperti string,
angka, objek, boolean, atau bahkan array lagi di dalamnya.
• Array pada PHP dapat dibuat dengan dua cara yaitu dengan cara
tradisional menggunakan fungsi array() atau dengan cara singkat
menggunakan kurung siku []
Kategori Array

Indexed Array

Associative Array

Multidimensional Array

Associative Multidimensional Array


Indexed Array
• Indexed Array adalah tipe array di mana setiap elemen memiliki
indeks numerik yang berurutan, dimulai dari 0.
• Dalam Indexed Array, elemen-elemen diakses dan diidentifikasi
berdasarkan urutan angka indeks yang dimilikinya.
Sintaks Indexed Array

<?php

$odd_numbers = [1,3,5,7,9];
$first_odd_number = $odd_numbers[0];
$second_odd_number = $odd_numbers[1];

echo "The first odd number is $first_odd_number\n";


echo "The second odd number is $second_odd_number\n";

?>
Associative Array
• Associative Array adalah tipe array di mana setiap elemen memiliki
kunci (key) yang terkait dengannya.
• Dalam Associative Array, elemen-elemen diakses dan diidentifikasi
berdasarkan kunci (key) yang bersifat unik.
Apakah associative array = hash table??
• Ya, dalam konteks pemrograman, Associative Array sering kali
diimplementasikan menggunakan struktur data yang dikenal sebagai
Hash Table atau Hash Map.
• Hash Table adalah struktur data yang memungkinkan penyimpanan
dan pengambilan data dengan menggunakan pasangan kunci-nilai
(key-value). Setiap elemen dalam Hash Table memiliki kunci yang unik
dan nilainya terkait dengan kunci tersebut.
• Di Python, tipe data yang mewakili Associative Array disebut sebagai
Dictionary.
Sintaks Associative Array

<?php
$phone_numbers = [
"Ani" => "415-235-8573",
" Budi" => "415-492-4856",
];

print_r($phone_numbers);
echo "Nomor telpon Ani:" . $phone_numbers["Ani"] . "\n";
echo "Nomor telpon Budi: " . $phone_numbers["Budi"] . "\n";
?>
Multidimensional Array
• Multidimensional Array adalah tipe array di mana setiap elemen
dalam array dapat berisi array lain.
• Dalam struktur Multidimensional Array ini, elemen-elemen diatur
dalam beberapa dimensi, memungkinkan penyimpanan data yang
lebih kompleks.
• Matriks sering kali diimplementasikan sebagai Multidimensional Array
dengan dua dimensi.
<?php
Sintaks $multiArray = [
[1, 2, 3],
Multidimensional [4, 5, 6],
[7, 8, 9],

Array ];

print_r($multiArray[0][0]);
print_r($multiArray[0][1]);

?>
Associative Multidimensional Array
• Associative Multidimensional Array adalah tipe array yang
menggabungkan fitur dari Associative Array dan Multidimensional
Array.
• Dalam tipe array ini, elemen-elemen diatur dalam beberapa dimensi
dengan setiap elemen memiliki kunci (key) yang terkait dengannya,
memungkinkan pengaksesan dan identifikasi berdasarkan kunci yang
unik.
<?php
$people = [
Sintaks "john_doe" => [
"name" => "John",
Associative "surname" => "Doe",
"age" => 25,
Multidimensional ],
"jane_doe" => [
Array "name" => "Jane",
"surname" => "Doe",
"age" => 25,
]
];

print_r($people);

?>
For loops [1]

<?php
$odd_numbers = [1,3,5,7,9];

for ($i = 0; $i < count($odd_numbers); $i++) {


echo $odd_numbers[$i];. "\n";
}
?>
Foreach [2]

<?php
$odd_numbers = [1,3,5,7,9];

foreach ($odd_numbers as $odd_number) {


echo $odd_number . "\n";
}
?>
Foreach [3]

<?php
$phone_numbers = [
"Ani" => "415-235-8573",
"Budi" => "415-492-4856",
];

foreach ($phone_numbers as $name => $number) {


echo "No. telpon $name = $number.\n";
}
?>
PHP array vs Numpy array
• PHP array biasanya digunakan untuk menyimpan data terstruktur,
seperti data yang diperoleh dari database atau form HTML.
Sedangkan Numpy array digunakan untuk mengelola data numerik
dan ilmiah yang besar dan kompleks.
• Numpy array memiliki beberapa fitur tambahan dalam pengolahan
data numerik dan ilmiah, seperti kemampuan untuk melakukan
operasi matematika pada seluruh array, indexing dan slicing yang
cepat, dan broadcasting
• PHP array lebih mirip dengan Python list daripada numpy array atau
tradisional array.
Laravel Collection
• Struktur data buatan Laravel yang menyediakan cara yang mudah dan
efisien dalam mengelola array di projek web PHP.
• Class collection tersedia di namespace Illuminate\Support\Collection .
• Collection memiliki metode untuk mengambil satu atau beberapa
nilai dari kumpulan data, seperti first(), last(), atau take().
• Collection dapat diiterasi dengan foreach loop, sehingga
memudahkan pengguna untuk melakukan operasi pada setiap
elemen data.

Selengkapnya: https://laravel.com/docs/10.x/collections#introduction
Eloquent x Collection
@foreach

$users = Users::all() Dari Usercontroller -> method index

Dari view blade

@foreach ($users as $user)


<p>This is user {{ $user->id }}</p>
@endforeach
@forelse

$users = Users::all() Dari Usercontroller -> method index

Dari view blade

@forelse ($users as $user)


<p>{{ $user->name }}</p>
@empty
<p>Data user belum ada</p>
@endforelse
@forelse vs foreach native

Bentuk kode PHP nativenya:

@forelse ($users as $user) <?php


<p>{{ $user->name }}</p> if (!empty($users)) {
@empty foreach ($users as $user) {
echo "<p>$user->name</p>";
<p>Data user belum ada</p>
}
@endforelse
} else {
echo "<p>Data user belum ada</p>";
}
?>
Response Collection Illuminate\Database\Eloquent\Collection {#3470
all: [
App\Models\User {#3471
id: 1,
Pada contoh di samping, name: "John Doe",
email: "john.doe@example.com",
User::all() akan mengembalikan created_at: "2022-03-01 10:00:00",
updated_at: "2022-03-01 10:00:00",
sebuah Collection yang berisi },
App\Models\User {#3472
instance-object dari model User. id: 2,
name: "Jane Doe",
email: "jane.doe@example.com",
created_at: "2022-03-02 10:00:00",
Setiap instance-object User memiliki updated_at: "2022-03-02 10:00:00",
},
properti seperti id, name, App\Models\User {#3473
id: 3,
email, created_at, dan name: "Bob Smith",
email: "bob.smith@example.com",
updated_at yang created_at: "2022-03-03 10:00:00",
updated_at: "2022-03-03 10:00:00",
merepresentasikan data dari setiap },
],
user pada database. }
Lazy Collection
• Lazy Collection adalah sebuah kelas di framework Laravel yang
digunakan untuk memanipulasi set data secara lazy, artinya data
hanya dimuat ke memori secara parsial ketika dibutuhkan.
• Class ini sangat berguna untuk mengatasi keterbatasan memori ketika
bekerja dengan dataset yang sangat besar.
Collection vs Lazy Collection
• Koleksi Laravel memuat seluruh data ke dalam memori sekaligus.
Dalam kata lain, jika kita memiliki kumpulan data yang sangat besar,
kita mungkin akan kehabisan memori jika mencoba memuat
semuanya ke dalam collections. Di sisi lain, LazyCollection memuat
data ke dalam memori hanya ketika diperlukan.
• Metode-metode LazyCollection dapat lebih lambat daripada metode-
metode Collection, terutama saat bekerja dengan kumpulan data
yang kecil, karena setiap operasi memerlukan kueri baru untuk
dieksekusi pada sumber data yang mendasarinya.
Eloquent->all()
• Metode all() mengambil semua record dari tabel database yang sesuai
dan membuat sebuah instance Collection dari array hasilnya.
Collection kemudian sepenuhnya dimuat ke dalam memori dan dapat
dimanipulasi menggunakan salah satu metode Collection.
• Ketika metode all() dipanggil pada model Eloquent, data yang
dikembalikan adalah sebuah instance Collection, bukan
LazyCollection.
Eloquent cursor()
• Saat bekerja dengan kumpulan data besar yang mungkin tidak muat
dalam memori, kita sebaiknya dapat menggunakan metode cursor()
sebagai alternatif dari all().
• Metode cursor() mengembalikan sebuah LazyCollection, yang
memungkinkan kita bekerja dengan records satu per satu tanpa harus
memuat seluruh kumpulan data ke dalam memori.
Contoh kode Collection
use Illuminate\Support\Collection;
@foreach($studentCollection as $student)
$students = [ <p>
[ Name: {{ $student['name'] }} <br>
'nama' => 'Ani', Age: {{ $student['age'] }} <br>
'umur' => 19, Major: {{ $student['major'] }} <br>
'prodi' => 'D3 Teknik Informatika', </p>
], @endforeach
[
'nama' => 'Budi',
'umur' => 21,
'prodi' => 'D4 Keamanan Siber',
],
[
'nama' => 'Cici',
'umur' => 20,
'prodi' => 'D4 Multimedia & Jaringan',
],
];

$studentCollection = collect($students);
Contoh kode LazyCollection
use Illuminate\Support\LazyCollection;
@foreach($studentCollection as $student)
$students = [ <p>
[ Name: {{ $student['name'] }} <br>
'nama' => 'Ani', Age: {{ $student['age'] }} <br>
'umur' => 19, Major: {{ $student['major'] }} <br>
'prodi' => 'D3 Teknik Informatika', </p>
@endforeach
],
[
'nama' => 'Budi',
'umur' => 21,
'prodi' => 'D4 Keamanan Siber',
],
[
'nama' => 'Cici',
'umur' => 20,
'prodi' => 'D4 Multimedia & Jaringan',
],
];

$studentCollection = LazyCollection::make($students);
Penggunaan cursor vs all

use App\Models\Post;

$normalPosts = Post::all();

return view('post.index', compact('normalPosts'));

use App\Models\Post;

$lazyPosts = Post::cursor();

return view('post.index', compact('lazyPosts'));


Implementasi cursor di dunia nyata
• Menghasilkan file ekspor dari dataset yang besar, mengambil data
dalam batch kecil menggunakan cursor dapat menghindari memuat
seluruh dataset ke dalam memori sekaligus.
• Dalam proses data streaming atau pengiriman data secara realtime,
penggunaan cursor memungkinkan pengambilan data dalam batch
kecil secara bertahap dan mengirimnya ke klien secara realtime.
• Integrasi sistem dengan layanan eksternal yang membutuhkan
pengambilan data dalam batch, seperti integrasi dengan layanan
pembayaran yang hanya menerima pembayaran dalam batch,
menggunakan cursor memungkinkan pengambilan data transaksi
dalam batch yang kecil.
Terima Kasih

Anda mungkin juga menyukai