Dalam operasi harian PHP, array adalah struktur yang paling umum, dan kami berurusan dengan konten terkait array hampir setiap hari. Jadi pertanyaannya adalah, bagaimana Anda melintasi dan memproses array secara umum.
1、untukmasing-masing
Sudah tidak asing lagi, bukankah ini favoritmu?
$arr = ['a', 'b', 'c'];
foreach ($arr sebagai $key => $value) {
$arr[$key] = $value . '_i';
}
print_r($arr); ['a_i', 'b_i', 'c_i'];
2、array_map
Gunakan fungsi anonim untuk menangani setiap elemen dalam array. Array baru dikembalikan saat traversal selesai
$arr = ['a', 'b', 'c'];
$arr = array_map(fungsi ($item) {
kembali $item . '_i';
}, $arr);
print_r($arr); ['a_i', 'b_i', 'c_i'];
Anda dapat bekerja dengan beberapa array secara bersamaan
$arr_1 = ['a', 'b', 'c'];
$arr_2 = ['Anda', 'baik', 'adalah', 'asli', 'dosa'];
$arr_n = [...];
$arr = array_map(fungsi ($item_1, $item_2) {
Kembali $item_1 . '_' . $item_2 . '_i';
}, $arr_1, $arr_2);
print_r($arr); ['a_ you _i', 'b_ is good_i', 'Are you c__i', '_original _i', '_sin_i']
Ya, jumlah traversal didasarkan pada array terpanjang.
Setelah melintasi 3 kali, $arr_1 benar-benar selesai, sehingga nilai $item_1 menjadi null setelah itu
3、array_walk
Melintasi array Anda sebagai pass referensi tidak memiliki nilai pengembalian dan hanya dapat memproses satu array.
$arr = ['a', 'b', 'c'];
array_walk($arr, fungsi (&$item) {
$item = $item . '_i';
});
print_r($arr); ['a_i', 'b_i', 'c_i'];
Perhatikan &$item, ya, ada tambahan &, yang berarti parameter Anda menerima data dengan referensi. Yang harus Anda lakukan adalah menemukan cara untuk mengubah parameter ini.
Jika Anda berhadapan dengan array dua dimensi, metode pemrosesannya juga tidak dapat dipisahkan.
$arr = [
['nama' => 'a'],
['nama' => 'b'],
['nama' => 'c']
];
array_walk($arr, fungsi (&$item) {
$item['nama'] = $item['nama'] . '_i';
});
print_r($arr); [['name' => 'a_i'], ['name' => 'b_i'], ['name' => 'c_i']];
4、 untuk
Ini harus menjadi sintaks super generik
$arr = ['a', 'b', 'c'];
untuk ($i = 0; $i < hitungan ($arr); ++$i) {
$arr[$i] = $arr[$i] . '_i';
}
print_r($arr); ['a_i', 'b_i', 'c_i'];
Tidak disarankan. Ini tidak seefisien foreach. Dan metode penulisannya sedikit lebih rumit daripada forreach.
5 、 masing-masing
Haha, fungsi ini telah ditinggalkan di @deprecated PHP7.2 dan terasa sangat kuno. Efisiensi eksekusi metode penulisan ini juga tidak baik, dan pemula harus langsung menyerah.
$arr = ['a', 'b', 'c'];
sementara (list($key, $value) = masing-masing($arr)) {
$arr[$key] = $value . '_i';
}
print_r($arr); ['a_i', 'b_i', 'c_i'];
6 、 mengatur ulang
Tepatnya, ini bukan hanya fungsi untuk mengatur ulang, tetapi juga kombinasi dari beberapa fungsi bawaan, yang pada dasarnya tidak digunakan untuk menulis kode
$arr = ['a', 'b', 'c'];
reset() ke kepala, sebenarnya defaultnya adalah menunjuk ke awal, Anda dapat mengabaikan kalimat ini
reset($arr);
current() untuk mendapatkan nilai elemen penunjuk saat ini
sementara ($value = arus($arr)) {
key() untuk mendapatkan subskrip elemen dari penunjuk saat ini
$arr[kunci($arr)] = $value . '_i';
next() penunjuk ke penunjuk berikutnya
berikutnya($arr);
}
print_r($arr); ['a_i', 'b_i', 'c_i'];
|