承接 rkwp/object-iterable-laravel 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

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 ObjectIterable yang mengonversi array ke objek dan mengabaikan case sensitivity saat mengakses array, serta mendeteksi jika suatu properti adalah array dan mengonversinya secara otomatis ke RowData.

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,profile atau php 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.php yang 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.php yang 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 $profile yang 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

Alt Text 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 Alt Text Makin penasaran apakah benar setiap datanya memiliki tipe data? yuk coba di dd Alt Text

统计信息

  • 总下载量: 32
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 3
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 3
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: Unknown
  • 更新时间: 2024-10-19