În operațiunile zilnice ale PHP, array-urile sunt cea mai comună structură, iar noi gestionăm conținut legat de array-uri aproape zilnic. Așadar, întrebarea este: cum traversezi și procesezi array-urile în general.
1、pentru fiecare
E familiar, nu-i așa că e preferatul tău?
$arr = ['a', 'b', 'c'];
foreach ($arr as $key => $value) {
$arr[$key] = $value . '_i';
}
print_r($arr); ['a_i', 'b_i', 'c_i'];
2、array_map
Folosește funcții anonime pentru a gestiona fiecare element din tablou. Un nou tablou este returnat când traversarea este completă
$arr = ['a', 'b', 'c'];
$arr = array_map(funcția ($item) {
întoarce-$item . '_i';
}, $arr);
print_r($arr); ['a_i', 'b_i', 'c_i'];
Poți lucra cu mai multe matrice în același timp
$arr_1 = ['a', 'b', 'c'];
$arr_2 = ['tu', 'bun', 'este', 'original', 'păcat'];
$arr_n = [...];
$arr = array_map(funcția ($item_1, $item_2) {
returnează $item_1 . '_' . $item_2. '_i';
}, $arr_1, $arr_2);
print_r($arr); ['a_ _i', 'b_ este good_i', 'Ești c__i', '_original _i', '_sin_i']
Da, numărul de traversări se bazează pe cea mai lungă matrice.
După ce parcurgi de 3 ori, $arr_1 este de fapt completată, deci valorile lui $item_1 sunt nule după aceea
3、array_walk
Parcurgerea array-ului ca trecere de referință nu are valoare de returnare și poate procesa doar un singur array.
$arr = ['a', 'b', 'c'];
array_walk($arr, funcția ($item) {
$item = $item . '_i';
});
print_r($arr); ['a_i', 'b_i', 'c_i'];
Notice $item, da, există un extra &, ceea ce înseamnă că parametrul tău primește date prin referință. Tot ce trebuie să faci este să găsești o modalitate de a schimba acest parametru.
Dacă lucrezi cu matrice bidimensionale, metoda de procesare este de asemenea inseparabilă.
$arr = [
['nume' => 'a'],
['nume' => 'b'],
['nume' => 'c']
];
array_walk($arr, funcția ($item) {
$item['nume'] = $item['nume'] . '_i';
});
print_r($arr); [['name' => 'a_i'], ['name' => 'b_i'], ['name' => 'c_i']];
4、pentru
Aceasta ar trebui să fie o sintaxă foarte generică
$arr = ['a', 'b', 'c'];
pentru ($i = 0; $i < numărătoare ($arr); ++$i) {
$arr[$i] = $arr[$i] . '_i';
}
print_r($arr); ['a_i', 'b_i', 'c_i'];
Nu este recomandat. Nu este la fel de eficient ca foreach. Și metoda de scriere este puțin mai greoaie decât cea din Forreach.
5、fiecare
Haha, această funcție a fost abandonată în PHP7.2 @deprecated și pare deosebit de demodată. Eficiența de execuție a acestei metode de scriere nu este, de asemenea, bună, iar începătorii ar trebui să renunțe imediat.
$arr = ['a', 'b', 'c'];
while (list($key, $value) = each($arr)) {
$arr[$key] = $value . '_i';
}
print_r($arr); ['a_i', 'b_i', 'c_i'];
6、reset
Mai exact, nu este doar o funcție de resetare, ci și o combinație de mai multe funcții încorporate, care practic nu este folosită pentru a scrie cod
$arr = ['a', 'b', 'c'];
reset() pointer către cap, de fapt, implicit este să indici spre început, poți ignora această propoziție
resetare ($arr);
curent() pentru a obține valoarea elementului pointerului curent
în timp ce ($value = curent($arr)) {
key() pentru a obține subscriptul elementului al pointerului curent
$arr[cheie($arr)] = $value . '_i';
next() indică către următorul
următorul ($arr);
}
print_r($arr); ['a_i', 'b_i', 'c_i'];
|