Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menukar objek php ke dalam array

Bagaimana untuk menukar objek php ke dalam array

PHPz
PHPzasal
2023-04-23 09:10:022263semak imbas

Dalam PHP, objek dan tatasusunan ialah jenis data yang sangat penting. Objek biasanya digunakan untuk mewakili keadaan kelas, manakala tatasusunan digunakan untuk menyimpan berbilang nilai. Kadangkala, kita perlu menukar objek PHP kepada tatasusunan untuk memudahkan pengendaliannya. Artikel ini akan menerangkan cara menukar objek PHP kepada tatasusunan.

1. Gunakan penukaran jenis paksa

Dalam PHP, anda boleh menggunakan operator penukaran jenis paksa untuk menukar objek kepada tatasusunan. Simbol ini ialah dua kurungan yang diletakkan di hadapan objek, contohnya:

$array = (array) $object;

Melakukannya akan menukar semua sifat dan nilai objek kepada tatasusunan. Sifat objek akan menjadi kunci tatasusunan, dan nilai sifat yang sepadan akan menjadi nilai tatasusunan.

Walau bagaimanapun, terdapat beberapa pengehadan untuk menggunakan kaedah ini untuk menukar objek. Pertama, harta persendirian dan dilindungi tidak boleh ditukar, hanya harta awam boleh. Kedua, jika objek mempunyai objek lain yang bersarang di dalamnya, anda perlu menentukan perwakilan rentetan dalam kaedah __toString() kelas, jika tidak, ia tidak akan ditukar dengan betul.

2. Gunakan lelaran objek

Pelajar objek PHP ialah antara muka khas yang membolehkan objek mengulang sifat dan nilainya dengan cara tertentu. Dengan melaksanakan antara muka iterator, kita boleh menukar objek kepada tatasusunan dan bukannya menggunakan cast.

Berikut ialah contoh mudah yang menunjukkan cara menggunakan antara muka iterator untuk melaksanakan penukaran objek kepada tatasusunan:

class User implements Iterator
{
    private $data = ['name' => 'John', 'email' => 'john@example.com'];
    private $position = 0;

    public function rewind()
    {
        $this->position = 0;
    }

    public function current()
    {
        $keys = array_keys($this->data);
        $key = $keys[$this->position];
        return [
            'key' => $key,
            'value' => $this->data[$key]
        ];
    }

    public function key()
    {
        $keys = array_keys($this->data);
        return $keys[$this->position];
    }

    public function next()
    {
        ++$this->position;
    }

    public function valid()
    {
        $keys = array_keys($this->data);
        return isset($keys[$this->position]);
    }

    public function toArray()
    {
        $data = array();
        foreach ($this as $key => $value) {
            $data[$value['key']] = $value['value'];
        }
        return $data;
    }
}

$user = new User();
print_r($user->toArray());

Dalam contoh ini, kami melaksanakan antara muka Iterator dan dalam current() Kaedah mengembalikan pasangan nilai kunci bagi sifat objek. Kemudian, dalam kaedah toArray(), kami menggunakan gelung foreach untuk mencipta tatasusunan baharu.

Dengan melaksanakan antara muka iterator dan menggunakan gelung toArray() dalam kaedah foreach, kita boleh menukar objek kepada tatasusunan.

3. Gunakan (array) json_decode()

Jika kelas adalah kompleks dan ia mengandungi berbilang objek bersarang, melaksanakan antara muka lelaran mungkin menyusahkan. Dalam kes ini, kita boleh menggunakan gabungan json_decode() dan (array) pemutus untuk menukar objek kepada tatasusunan.

Kod sampel adalah seperti berikut:

class User
{
    private $name = "John";
    private $email = "john@example.com";
    private $address;

    public function __construct()
    {
        $this->address = new Address("100 Main St", "New York");
    }
}

class Address
{
    private $street;
    private $city;

    public function __construct($street, $city)
    {
        $this->street = $street;
        $this->city = $city;
    }
}

$user = new User();
$array = (array) json_decode(json_encode($user), true);
print_r($array);

Dalam contoh ini, kami mentakrifkan kelas User dan kelas Address. Kelas User mengandungi objek Address. Kami kemudian menggunakan json_encode() untuk menukar objek $user kepada rentetan JSON dan cast (array) untuk menukarnya kepada tatasusunan. Akhir sekali, kami menggunakan print_r() untuk mengeluarkan tatasusunan.

Memandangkan format JSON hampir sama dengan format tatasusunan PHP, apabila kita menggunakan (array) json_decode() kastor, rentetan JSON ditukar menjadi tatasusunan PHP.

4. Gunakan get_object_vars()

Jika kelas tidak mewarisi kelas induk dan ia tidak mempunyai objek bersarang, anda boleh menggunakan fungsi get_object_vars() terbina dalam PHP untuk menukar objek ke dalam tatasusunan. Fungsi ini mengembalikan semua sifat dan nilai objek, tidak termasuk sifat dan kaedah bukan awam.

Kod sampel adalah seperti berikut:

class User
{
    public $name = "John";
    public $email = "john@example.com";
}

$user = new User();
$array = get_object_vars($user);
print_r($array);

Dalam contoh ini, kami mentakrifkan kelas User, yang mengandungi dua sifat awam $name dan $email. Kami kemudian mencipta objek $user dan menukarnya kepada tatasusunan menggunakan fungsi get_object_vars(). Akhir sekali, kami menggunakan fungsi print_r() untuk mengeluarkan tatasusunan.

Ringkasan

Dalam PHP, kita boleh menggunakan pelbagai kaedah untuk menukar objek kepada tatasusunan. Jika kelas adalah mudah dan tidak mempunyai objek bersarang, maka ia boleh ditukar kepada tatasusunan menggunakan fungsi get_object_vars(). Jika kelas lebih kompleks, anda boleh melaksanakan antara muka iterator dan menggunakan gelung toArray() dalam kaedah foreach untuk menukar kepada tatasusunan. Jika kelas mengandungi objek bersarang, ia boleh ditukar kepada rentetan JSON dan ditukar kepada tatasusunan menggunakan cast (array) json_decode().

Atas ialah kandungan terperinci Bagaimana untuk menukar objek php ke dalam array. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn