rkwp/object-iterable-laravel
最新稳定版本:v1.0.7
Composer 安装命令:
composer require rkwp/object-iterable-laravel
包简介
A utility library for ObjectIterable and global function.
README 文档
README
ObjectIterable saya buat karena kebutuhan kerja saya, saya tidak ingin ketika saya akses data array berdasarkan key / property harus case sensitive
Fungsi:
-
ObjectIterabe akan membantu kamu untuk mengabaikan case sensitive ketika mencoba akses array.
-
ObjectIterabe otomatis mengconvert array menjadi class (class disini bisa berperilaku seperti array, jadi kamu bisa akses seperti array pada umumnya)
Berikut adalah dokumentasi untuk penggunaan class
ObjectIterableyang mengonversi array ke objek dan mengabaikan case sensitivity saat mengakses array, serta mendeteksi jika suatu properti adalah array dan mengonversinya secara otomatis keRowData.
Install
composer require rkwp/object-iterable-laravel
Pembuatan ObjectIterable
Untuk membuat instance dari ObjectIterable, cukup masukkan array yang ingin dikonversi:
$array = [ 'NAME' => 'John Doe', 'email' => 'johndoe@example.com', 'ADDRESS' => [ 'CITY' => 'New York', 'ZIP' => '10001', ], ]; $objectIterable = objectIterable($array);
Akses Properti dengan Case Insensitive
Setelah array dikonversi, Anda dapat mengakses nilai-nilai di dalamnya secara case-insensitive. Misalnya:
echo $objectIterable->name; // Output: John Doe echo $objectIterable->EMAIL; // Output: johndoe@example.com
Akses Properti yang Merupakan Array
Jika properti berisi array, properti tersebut secara otomatis akan dikonversi menjadi objek RowData:
echo $objectIterable->address->city; // Output: New York echo $objectIterable->ADDRESS->ZIP; // Output: 10001
Penggunaan dengan foreach (Iterator)
Anda dapat melakukan iterasi menggunakan foreach jika data array sudah di konversi menjadi objectIterable. Berikut contohnya:
foreach ($objectIterable as $item) { echo $item->name; echo $item->email; echo $item['email']; echo $item['EMAIL']; }
Untuk array di dalam properti, iterasi akan bekerja sama:
foreach ($objectIterable->address as $key => $value) { echo "$key: $value"; }
Mengonversi Kembali ke Semi Array
Jika Anda ingin mengonversi objek kembali menjadi semi array, gunakan metode toArray():
$array = $objectIterable->toArray();
Mengonversi Kembali ke Array
Jika Anda ingin mengonversi objek kembali menjadi array, gunakan metode forceArray():
$array = $objectIterable->forceArray();
Mengonversi ke Laravel Collection
Jika Anda menggunakan Laravel dan ingin memanfaatkan Collection, gunakan metode toCollect():
$collection = $objectIterable->toCollect();
Menggunakan JSON Serialize
Anda dapat mengubah instance ObjectIterable ke JSON menggunakan json_encode():
$json = json_encode($objectIterable); // Menghasilkan JSON dari objek
ArrayAccess (Akses seperti Array)
ObjectIterable dan RowData juga mendukung akses seperti array:
echo $objectIterable['name']; // Output: John Doe
Jika properti merupakan array, maka akan tetap bisa diakses seperti ini:
echo $objectIterable['ADDRESS']['CITY']; // Output: New York
Penghitungan Jumlah Item
Anda dapat menggunakan count() untuk mengetahui jumlah elemen dalam ObjectIterable:
echo count($objectIterable); // Output: jumlah elemen dalam array
Case Sensitive
Pada awalnya objectIterable ini dibuat untuk mengabaikan case sensitive, namun jika kamu ingin case sensitive, tambahkan parameter kedua menjadi false
$objectIterable = objectIterable($array, false);
Contoh Kasus
$data = [ 'Name' => 'Alice', 'age' => 30, 'Address' => [ 'Street' => '123 Main St', 'City' => 'Wonderland', ] ]; $object = objectIterable($data); echo $object->name; // Alice echo $object->address->city; // Wonderland $arrayBack = $object->toArray();
Ini adalah cara pemakaian dasar dari class ObjectIterable yang Anda buat untuk mengonversi array ke objek dan memberikan akses yang lebih fleksibel dengan fitur case-insensitive serta otomatisasi dalam penanganan properti berjenis array.
Lalu bagaimana untuk definisikan data object?
Mungkin jika kamu sudah terbiasa menggunakan TypeScript sudah tidak asing lagi dengan autocomplete yang membantu kamu mengetahui sebuah objek itu akan return property apa saja. Di TypeScrpt bisa mengggunakan tipe data custom dan interface.
Nah, dengan object iterable juga, berikut cara cara nya:
Setelah itu, daftarkan artisan command di project laravel kamu. Ada di file: app/Console/Kernel.php
Kemdian tambahkan ini:
protected $commands = [ \RKWP\Commands\GenerateDataTypeAndDataStructure::class ];
-
Jalankan
php artisan make:data-type {NamaType} {property1,property2} {?isArrayOrNot} -
Contoh:
php artisan make:data-type Users/User id,name,email,created_at,status,profileatauphp artisan make:data-type Users/User id,name,email,created_at,status,profile -
Setalah itu, maka akan terbuat file baru di
app/DataType/Users/TUser.phpyang berisi:
<?php namespace App\DataType\Devel\Users; use App\DataStructure\Devel\Users\UserStruct; use App\Helper\ObjectIterable; class TUser extends ObjectIterable { use UserStruct; function __construct() { foreach (get_object_vars($this) as $name => $value) { unset($this->{$name}); } } /** * @return self|ObjectIterable */ public function set($items) { $this->assign($items, static::class); return $this; } }
- Dan akan terbuat file struct di
app/DataStructure/Users/UserStruct.phpyang akanb berisi:
<?php namespace App\DataStructure\Devel\Users; use App\DataType\Devel\Users\TProfile; trait UserStruct { public $id; public $name; public $email; public $created_at; public $status; public TProfile $profile; // ini saya tambahkan sendiri secara manual, tapi class TProfile tetap saya buat menggunakan perintah artisan yang tadi }
- Ada satu property tambahan yaitu
$profileyang saya buat dan menyesuaikan property dari data array di bawah
Hasil Final Cara Pakai Interface Object DataType
$users = [ [ 'id' => 1, 'name' => 'John Doe', 'email' => 'johndoe@example.com', 'created_at' => '2024-10-01T10:30:00Z', 'status' => 'active', 'profile' => [ 'age' => 30, 'gender' => 'male', 'location' => 'New York' ], ], [ 'id' => 2, 'name' => 'Jane Smith', 'email' => 'janesmith@example.com', 'created_at' => '2024-09-15T08:45:00Z', 'status' => 'inactive', 'profile' => [ 'age' => 27, 'gender' => 'female', 'location' => 'Los Angeles' ], ], [ 'id' => 3, 'name' => 'Alice Johnson', 'email' => 'alicej@example.com', 'created_at' => '2024-11-01T13:20:00Z', 'status' => 'active', 'profile' => [ 'age' => 35, 'gender' => 'female', 'location' => 'Chicago' ], ], [ 'id' => 4, 'name' => 'Bob Brown', 'email' => 'bobbrown@example.com', 'created_at' => '2024-08-22T11:05:00Z', 'status' => 'suspended', 'profile' => [ 'age' => 40, 'gender' => 'male', 'location' => 'San Francisco' ], ], [ 'id' => 5, 'name' => 'Charlie Green', 'email' => 'charliegreen@example.com', 'created_at' => '2024-07-30T16:00:00Z', 'status' => 'active', 'profile' => [ 'age' => 22, 'gender' => 'non-binary', 'location' => 'Seattle' ], ] ]; $users = (new TUser())->set($users); dd($users->toArray()); // Untuk debug data $ageUsers = []; foreach ($users as $user) { array_push($ageUsers, $user->profile->age); } return implode(',', $ageUsers);
Contoh Gambar
Perhatikan gambar diatas, ketika saya mengetikan $user->nam terlihat ada saran property nya, begitupun ketika saya coba akses property $user->profile. Karena profile sudah bisa diibaratkan memiliki tipe data yaitu TProfile
Makin penasaran apakah benar setiap datanya memiliki tipe data? yuk coba di dd

统计信息
- 总下载量: 32
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 3
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: Unknown
- 更新时间: 2024-10-19