mata teras
. Ya, lelaran hanyalah proses melintasi senarai nilai. Iterator adalah objek yang melintasi senarai, yang boleh menjadi array, senarai direktori, atau set hasil pangkalan data. Di bahagian pertama siri ini, saya akan memperkenalkan anda kepada lelaran dan bagaimana untuk memanfaatkan beberapa kelas terbina dalam dalam Perpustakaan PHP Standard (SPL). SPL mengandungi sebilangan besar iterator, menggunakannya dalam kod anda boleh meningkatkan kecekapan kod dan, dalam kebanyakan kes, membuat kod lebih mudah dibaca. foreach
kapan dan mengapa menggunakan iterator spl
Seperti yang anda lihat, objek iterator iterative pada dasarnya sama dengan array berulang, begitu banyak orang ingin tahu sama ada lebih mudah untuk melekat dengan array pada mulanya. Walau bagaimanapun, kelebihan sebenar iterator adalah ketika melintasi sejumlah besar data atau data yang lebih kompleks daripada array mudah. Gelung salinan mana -mana array yang diserahkan kepadanya. Jika anda bekerja pada sejumlah besar data, anda akan menyalinnya setiap kali anda menggunakan array yang besar dalam gelung, yang mungkin tidak diingini. Iterator SPL merangkumi senarai dan mendedahkan penglihatan hanya satu elemen pada satu masa, menjadikannya lebih efisien. Iterator adalah pembinaan yang baik apabila membuat penyedia data, kerana ia membolehkan anda melambatkan pemuatan data. Memuatkan malas di sini hanya mengambil data yang diperlukan apabila diperlukan. Anda juga boleh memanipulasi (penapis, menukar, dan lain -lain) data yang diproses sebelum menjadikannya tersedia kepada pengguna. Walau bagaimanapun, keputusan untuk menggunakan iterator sentiasa mengikut budi bicara anda. Terdapat banyak manfaat untuk iterators, tetapi dalam beberapa kes (seperti set array yang lebih kecil), ia boleh membawa kepada overhead yang tidak perlu. Bila menggunakannya terpulang kepada anda; foreach
foreach
Iterator pertama yang ingin saya perkenalkan kepada anda adalah ArrayIterator. Pembina mengambil array sebagai hujah dan menyediakan kaedah yang boleh digunakan untuk melintasinya. Berikut adalah contoh: output kod di atas adalah: Biasanya, anda akan menggunakan ArrayObject (kelas yang membolehkan anda memproses objek sebagai tatasusunan dalam konteks tertentu) dan bukannya menggunakan ArrayIterator secara langsung. Apabila anda menggunakan gelung Cara yang lebih elegan adalah menggunakan RecursiveArrayIterator: output adalah sama seperti dalam contoh sebelumnya. Perhatikan bahawa anda perlu membuat contoh recursiveIterator di sini dan lulus ke objek RecursiveArrayIterator, jika tidak, anda hanya akan mendapat nilai dalam array akar (dan banyak pemberitahuan yang dihasilkan berdasarkan tetapan anda). Apabila bekerja dengan tatasusunan pelbagai dimensi, anda harus menggunakan RecursiveArrayIterator kerana ia membolehkan anda meleleh melalui entri semasa, tetapi ia bergantung kepada anda melakukannya sendiri. RecursiveIteratorerator adalah penghias yang melakukan ini untuk anda. Ia mengambil recursiveArrayIterator, melangkah ke atasnya dan melangkah ke atas mana -mana penyertaan yang boleh didapati (dan sebagainya). Pada asasnya, ia "flat" recursiveArrayIterator. Anda boleh mendapatkan kedalaman lelaran semasa untuk menjejaki dengan memanggil recursiveIteratorerator :: getDepth (). Walau bagaimanapun, jika anda ingin mengembalikan objek, berhati -hati untuk menggunakan RecursiveArrayIterator dan RecursiveIteratorerator; Senarai direktori iTeration
Anda pasti perlu melangkah ke atas direktori dan failnya pada satu ketika dan anda boleh melakukan ini menggunakan fungsi terbina dalam yang disediakan oleh PHP (seperti atau
Gunakan banyak kaedah lain seperti DirectoryIterator :: iSdot (), DirectoryIterator :: GetType (), dan DirectoryIterator :: GetSize (), hampir semua keperluan maklumat direktori asas anda. Anda juga boleh menggabungkan direktori dengan penapis atau regexiterator untuk mengembalikan fail yang sepadan dengan keadaan tertentu. Contohnya:
Ringkasan
gambar dari Mushakesa / Shutterstock
Apa yang dimaksudkan dalam PHP dan mengapa ia penting? Bagaimana menggunakan Iterator SPL dalam PHP? untuk bergerak ke item seterusnya, dan gunakan kaedah anda boleh menapis data dengan menggunakan kelas penapis. Kelas ini membolehkan anda menentukan penapis tersuai yang digunakan untuk setiap item dalam koleksi. Hanya item yang melalui penapis akan dikembalikan oleh Iterator. Anda boleh menyusun data dengan menggunakan kelas ArrayObject. Kelas ini menyediakan kaedah Pengecualian SPL adalah jenis pengecualian yang direka khas untuk SPL. Mereka menyediakan cara untuk menangani kesilapan yang berlaku semasa menggunakan SPL. Untuk menggunakan pengecualian SPL, anda hanya membuangnya ke dalam blok Anda boleh menggunakan kelas SplfileObject untuk membaca dan menulis fail. Kelas ini menyediakan kaedah untuk membuka, membaca, menulis, dan menutup fail. Ia juga menyediakan kaedah untuk memindahkan petunjuk fail dan memeriksa sama ada akhir fail telah dicapai. Anda boleh menggunakan kelas direktori untuk memproses direktori. Kelas ini menyediakan kaedah untuk membuka direktori, membaca kandungannya, dan menutup direktori. Ia juga menyediakan kaedah untuk memeriksa sama ada fail adalah direktori dan untuk mendapatkan saiz, jenis, dan masa pengubahsuaian fail. Anda boleh menggunakan kelas ArrayObject dan ArrayIterator untuk memproses tatasusunan. Kelas -kelas ini menyediakan kaedah untuk membuat array, menambah item kepadanya, mengeluarkan item daripadanya, dan melangkah ke atas itemnya. Mereka juga menyediakan kaedah untuk menyusun tatasusunan dan memeriksa jika item wujud dalam array. Anda boleh menggunakan pelbagai kelas struktur data yang disediakan oleh SPL untuk memproses struktur data. Kelas -kelas ini termasuk splstack, splqueue, splheap, dan splpriorityqueue. Setiap kelas menyediakan kaedah untuk mewujudkan struktur data, menambah item kepadanya, mengeluarkan item daripadanya, dan melangkah ke atas itemnya. <?php
// 一个数组(使用PHP 5.4的新简写法)
$arr = ["sitepoint", "phpmaster", "buildmobile", "rubysource",
"designfestival", "cloudspring"];
// 创建一个新的ArrayIterator并传入数组
$iter = new ArrayIterator($arr);
// 遍历对象
foreach ($iter as $key => $value) {
echo $key . ": " . $value . "<br></br>";
}
<code>0: sitepoint
1: phpmaster
2: buildmobile
3: rubysource
4: designfestival
5: cloudspring</code>
foreach
atau panggilan ArrayIterator :: getIterator () secara langsung, ia secara automatik akan membuat arrayIterator untuk anda. Perhatikan bahawa sementara ArrayObject dan ArrayIterator berkelakuan seperti array dalam konteks ini, mereka masih objek; ArrayIterator mudah digunakan, tetapi hanya untuk tatasusunan satu dimensi. Kadang -kadang anda mempunyai pelbagai multidimensi dan anda ingin berulang -ulang meleleh melalui array bersarang. Dalam kes ini, anda boleh menggunakan RecursiveArrayIterator. Senario yang biasa adalah untuk bersarang sort()
gelung atau membuat fungsi rekursif untuk memeriksa semua item dalam pelbagai multidimensi. Contohnya: array_keys()
foreach
output kod di atas adalah: <?php
// 一个多维数组
$arr = [
["sitepoint", "phpmaster"],
["buildmobile", "rubysource"],
["designfestival", "cloudspring"],
"not an array"
];
// 遍历对象
foreach ($arr as $key => $value) {
// 检查数组
if (is_array($value)) {
foreach ($value as $k => $v) {
echo $k . ": " . $v . "<br></br>";
}
} else {
echo $key . ": " . $value . "<br></br>";
}
}
<code>0: sitepoint
1: phpmaster
0: buildmobile
1: rubysource
0: designfestival
1: cloudspring
3: not an array</code>
<?php
...
$iter = new RecursiveArrayIterator($arr);
// 遍历对象
// 我们需要创建一个RecursiveIteratorIterator实例
foreach (new RecursiveIteratorIterator($iter) as $key => $value) {
echo $key . ": " . $value . "<br></br>";
}
scandir()
glob()
output jelas bergantung pada jalan yang anda nyatakan dan kandungan direktori. Contohnya: <?php
// 创建新的DirectoryIterator对象
$dir = new DirectoryIterator("/my/directory/path");
// 遍历目录列表
foreach ($dir as $item) {
echo $item . "<br></br>";
}
<?php
// 一个数组(使用PHP 5.4的新简写法)
$arr = ["sitepoint", "phpmaster", "buildmobile", "rubysource",
"designfestival", "cloudspring"];
// 创建一个新的ArrayIterator并传入数组
$iter = new ArrayIterator($arr);
// 遍历对象
foreach ($iter as $key => $value) {
echo $key . ": " . $value . "<br></br>";
}
<code>0: sitepoint
1: phpmaster
2: buildmobile
3: rubysource
4: designfestival
5: cloudspring</code>
<?php
// 一个多维数组
$arr = [
["sitepoint", "phpmaster"],
["buildmobile", "rubysource"],
["designfestival", "cloudspring"],
"not an array"
];
// 遍历对象
foreach ($arr as $key => $value) {
// 检查数组
if (is_array($value)) {
foreach ($value as $k => $v) {
echo $k . ": " . $v . "<br></br>";
}
} else {
echo $key . ": " . $value . "<br></br>";
}
}
<code>0: sitepoint
1: phpmaster
0: buildmobile
1: rubysource
0: designfestival
1: cloudspring
3: not an array</code>
<?php
...
$iter = new RecursiveArrayIterator($arr);
// 遍历对象
// 我们需要创建一个RecursiveIteratorIterator实例
foreach (new RecursiveIteratorIterator($iter) as $key => $value) {
echo $key . ": " . $value . "<br></br>";
}
Soalan Lazim Mengenai Menggunakan Iterator SPL SPL bermaksud perpustakaan php standard. Ia adalah satu set antara muka dan kelas yang direka untuk menyelesaikan masalah biasa. SPL menyediakan banyak struktur data, antara muka, dan pengecualian yang boleh digunakan untuk mengendalikan tugas kompleks dengan lebih cekap. Ia penting kerana ia dapat membantu mengurangkan jumlah kod yang anda perlukan untuk menulis, meningkatkan prestasi, dan menjadikan kod anda lebih mudah untuk dibaca dan diselenggara.
Iterator SPL digunakan untuk melangkah ke atas set data. Untuk menggunakan Iterator SPL, anda perlu membuat contoh kelas Iterator. Anda kemudian boleh melangkah melalui koleksi menggunakan kaedah iterator. Sebagai contoh, anda boleh menggunakan kaedah
untuk mendapatkan item semasa, gunakan kaedah current()
untuk memeriksa sama ada terdapat lebih banyak item untuk melangkah ke atas. next()
valid()
Apakah beberapa contoh pengiklan SPL? Terdapat banyak jenis pengiklan SPL, masing -masing direka untuk tujuan tertentu. Beberapa contoh termasuk ArrayIterator (untuk melelehkan tatasusunan);
Bagaimana untuk menapis data menggunakan Iterator SPL?
Bagaimana untuk menyusun data menggunakan Iterator SPL?
asort()
untuk menyusun item dalam koleksi. Anda juga boleh menggunakan kaedah uasort()
untuk menyusun item menggunakan fungsi perbandingan tersuai. Apakah pengecualian SPL dan bagaimana anda menggunakannya?
try
dan menangkapnya di blok catch
. Bagaimana cara membaca dan menulis fail menggunakan SPL?
Bagaimana menggunakan SPL untuk memproses direktori?
Bagaimana menggunakan SPL untuk memproses tatasusunan?
Bagaimana menggunakan SPL untuk memproses struktur data?
Atas ialah kandungan terperinci Menggunakan Iterator SPL, Bahagian 1. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!