Tatasusunan dan objek ialah salah satu struktur data yang paling biasa digunakan semasa membangunkan aplikasi web. Sebagai bahasa skrip, PHP sangat mudah untuk mengendalikan tatasusunan dan objek. Walau bagaimanapun, apabila kami menemui data dengan struktur kompleks seperti tatasusunan berbilang dimensi, tatasusunan yang mengandungi objek, objek yang mengandungi tatasusunan, dll., penghuraian PHP memerlukan beberapa kemahiran dan kaedah.
Artikel ini akan memperkenalkan cara PHP menghuraikan data struktur kompleks seperti tatasusunan, objek, objek bersarang dalam tatasusunan dan tatasusunan bersarang dalam objek Ia akan menggambarkan proses penghuraian dan langkah berjaga-jaga melalui beberapa contoh.
Tatasusunan dalam PHP boleh dibuat terus menggunakan tatasusunan kata kunci atau melalui simbol []. Penghuraian tatasusunan ringkas adalah sangat mudah Anda boleh mengakses terus elemen dalam tatasusunan melalui subskrip, seperti:
<?php $arr = ['apple', 'banana', 'pear']; echo $arr[0]; //输出apple echo $arr[1]; //输出banana echo $arr[2]; //输出pear ?>
Walau bagaimanapun, apabila tatasusunan menjadi kompleks dan mengandungi tatasusunan berbilang dimensi, ia tidak. begitu mudah untuk mengakses elemen. Pada ketika ini, kita perlu menggunakan traversal untuk menghuraikan elemen dalam tatasusunan.
<?php $arr = [ 'fruit' => [ 'apple' => ['color' => 'red', 'price' => 2], 'banana' => ['color' => 'yellow', 'price' => 3], 'pear' => ['color' => 'green', 'price' => 4] ] ]; foreach ($arr['fruit'] as $name => $item) { echo $name . ':' . $item['color'] . '(' . $item['price'] . '元)<br/>'; } ?>
Dalam kod di atas, kami menggunakan gelung foreach untuk melintasi elemen dalam tatasusunan dan mendapatkan warna dan harga setiap buah dalam tatasusunan. Kaedah traversal ini sesuai untuk sebarang struktur tatasusunan berbilang peringkat.
Dalam PHP, kita boleh menggunakan kelas kata kunci dan baharu untuk mencipta objek. Penghuraian objek mudah adalah sangat mudah dan anda boleh menggunakan pengendali anak panah -> untuk mengakses sifat atau kaedah objek secara langsung.
<?php class Person { public $name; public $age; public function sayHello() { echo 'Hello, I\'m ' . $this->name . '.'; } } $p = new Person(); $p->name = 'Jack'; $p->age = 18; $p->sayHello(); //输出Hello, I'm Jack. ?>
Walau bagaimanapun, apabila objek mengandungi tatasusunan dalam atau berbilang objek, mengakses elemen memerlukan kaedah traversal yang lebih kompleks.
Sebagai contoh, kami mencipta objek "watak" Setiap aksara mengandungi tatasusunan "tag" dan objek "rakan" Objek rakan mengandungi dua sifat "nama" dan "maklumat hubungan".
<?php class Tag { public $name; public $value; } class Friend { public $name; public $contact; } class Person { public $name; public $age; public $tags = []; public $friend; }
Kami mencipta dua objek aksara, setiap satu mengandungi dua tag dan rakan.
$p1 = new Person(); $p1->name = 'Jack'; $p1->age = 18; $p1->tags[0] = new Tag(); $p1->tags[0]->name = 'sport'; $p1->tags[0]->value = 5; $p1->tags[1] = new Tag(); $p1->tags[1]->name = 'music'; $p1->tags[1]->value = 3; $p1->friend = new Friend(); $p1->friend->name = 'Lucas'; $p1->friend->contact = '123456'; $p2 = new Person(); $p2->name = 'Amy'; $p2->age = 20; $p2->tags[0] = new Tag(); $p2->tags[0]->name = 'reading'; $p2->tags[0]->value = 3; $p2->tags[1] = new Tag(); $p2->tags[1]->name = 'travel'; $p2->tags[1]->value = 2; $p2->friend = new Friend(); $p2->friend->name = 'Lily'; $p2->friend->contact = '654321';
Seterusnya, kami merentasi semua maklumat setiap aksara dan mengeluarkannya ke halaman.
<?php echo '<table border="1">'; echo '<tr><th>Name</th><th>Age</th><th>Tags</th><th>Friend</th></tr>'; foreach ([$p1, $p2] as $person) { echo '<tr>'; echo '<td>' . $person->name . '</td>'; echo '<td>' . $person->age . '</td>'; echo '<td>'; foreach ($person->tags as $tag) { echo $tag->name . ':' . $tag->value . '<br/>'; } echo '</td>'; echo '<td>' . $person->friend->name . '<br/>' . $person->friend->contact . '</td>'; echo '</tr>'; } echo '</table>'; ?>
Dalam kod di atas, kami menggunakan dua gelung foreach, satu untuk melintasi tatasusunan aksara dan satu untuk melintasi tatasusunan label dalam aksara. Pada masa yang sama, kami menggunakan operator anak panah -> untuk mendapatkan dan mengeluarkan maklumat rakan.
Apabila kita ingin memproses tatasusunan dan setiap elemen dalam tatasusunan ialah objek, kita perlu menggunakan traversal untuk menghuraikan tatasusunan elemen, dan gunakan operator anak panah -> untuk mendapatkan atribut dalam setiap objek.
Sebagai contoh, kami mencipta tatasusunan untuk menyimpan maklumat pelajar Setiap pelajar mempunyai tiga atribut: nama, umur dan pekerjaan.
<?php class Student { public $name; public $age; public $job; } $arr = [ new Student(), new Student(), new Student() ]; $arr[0]->name = 'Lucas'; $arr[0]->age = 18; $arr[0]->job = 'Student'; $arr[1]->name = 'Lily'; $arr[1]->age = 19; $arr[1]->job = 'Engineer'; $arr[2]->name = 'Jack'; $arr[2]->age = 20; $arr[2]->job = 'Teacher'; ?>
Kami menggunakan gelung foreach untuk melintasi setiap elemen dalam tatasusunan dan menggunakan pengendali anak panah ->
<?php foreach ($arr as $item) { echo $item->name . '(' . $item->age . ',' . $item->job . ')<br/>'; } ?>
Apabila kita ingin memproses objek dan atribut dalam objek ialah tatasusunan, kita perlu menggunakan traversal untuk menghuraikan Elemen dalam tatasusunan dan gunakan pengendali anak panah ->
Sebagai contoh, kami mencipta objek pelajar Pelajar itu mempunyai nama, umur, pekerjaan dan berbilang alamat. Alamat mengandungi wilayah, bandar, daerah dan daerah, maklumat jalan dan atribut Boolean yang menunjukkan sama ada ia adalah alamat lalai.
<?php class Address { public $province; public $city; public $district; public $street; public $isDefault; } class Student { public $name; public $age; public $job; public $addresses = []; } $p = new Student(); $p->name = 'Lucas'; $p->age = 18; $p->job = 'Student'; $p->addresses[] = new Address(); $p->addresses[0]->province = '江苏省'; $p->addresses[0]->city = '南京市'; $p->addresses[0]->district = '鼓楼区'; $p->addresses[0]->street = '汉口路1号'; $p->addresses[0]->isDefault = true; $p->addresses[] = new Address(); $p->addresses[1]->province = '江苏省'; $p->addresses[1]->city = '南京市'; $p->addresses[1]->district = '玄武区'; $p->addresses[1]->street = '北京东路1号'; $p->addresses[1]->isDefault = false; ?>
Kami melintasi tatasusunan alamat dalam objek pelajar, menggunakan pengendali anak panah -> untuk mendapatkan atribut lain pelajar dan mengeluarkannya ke halaman.
<?php echo $p->name . '(' . $p->age . ',' . $p->job . ')<br/>'; foreach ($p->addresses as $addr) { echo $addr->province . $addr->city . $addr->district . $addr->street; echo '默认地址:' . ($addr->isDefault ? '是' : '否') . '<br/>'; } ?>
Ringkasnya, PHP perlu menggunakan kaedah yang berbeza mengikut situasi sebenar untuk menghuraikan data struktur kompleks seperti tatasusunan, objek, objek bersarang dalam tatasusunan dan tatasusunan bersarang dalam objek, dengan merentasi dan mengakses cara untuk menghuraikan data. Apabila memproses data yang kompleks, kita perlu memilih kaedah penghuraian yang sesuai berdasarkan struktur data dan senario penggunaan.
Atas ialah kandungan terperinci Bagaimana untuk menghuraikan objek tatasusunan dalam php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!