See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 2908|Vastuse: 0

Uustulnukate postitus, PHP võtab kokku 6 viisi massiivide läbimiseks

[Kopeeri link]
Postitatud 08.06.2022 15:56:10 | | |


PHP igapäevases tegevuses on massiivid kõige tavalisem struktuur ning me tegeleme massiividega seotud sisuga peaaegu iga päev. Seega küsimus on, kuidas massiivid üldiselt läbida ja töödelda.


1、foreach
See on tuttav, kas pole see su lemmik?
$arr = ['a', 'b', 'c'];
foreach ($arr kui $key => $value) {
    $arr[$key] = $value . '_i';
}
print_r($arr); ['a_i', 'b_i', 'c_i'];


2、array_map
Kasuta anonüümseid funktsioone massiivi iga elemendi haldamiseks. Uus massiiv tagastatakse, kui läbimine on lõppenud
$arr = ['a', 'b', 'c'];
$arr = array_map(funktsioon ($item) {
    Tagasi $item. '_i';
}, $arr);
print_r($arr); ['a_i', 'b_i', 'c_i'];
Sa saad töötada mitme massiiviga samaaegselt
$arr_1 = ['a', 'b', 'c'];
$arr_2 = ['sina', 'hea', 'on', 'originaalne', 'patt'];
$arr_n = [...];
$arr = array_map(funktsioon ($item_1, $item_2) {
    Return $item_1 . '_' . $item_2. '_i';
}, $arr_1, $arr_2);
print_r($arr); ['a_ sa _i', 'b_ on good_i', 'Kas sa oled c__i', '_original _i', '_sin_i']
Jah, läbimiste arv põhineb kõige pikimal võrgustikul.
Pärast kolme läbimist on $arr_1 tegelikult täidetud, seega on $item_1 väärtused pärast seda nullid


3、array_walk
Massiivi läbimine viitepassina ei too tagastusväärtust ja saab töödelda ainult ühte massiivi.
$arr = ['a', 'b', 'c'];
array_walk($arr, funktsioon (&$item) {
    $item = $item . '_i';
});


print_r($arr); ['a_i', 'b_i', 'c_i'];
Pane tähele &$item jah, on olemas lisav &, mis tähendab, et sinu parameeter saab andmeid viite kaudu. Kõik, mida pead tegema, on leida viis selle parameetri muutmiseks.


Kui tegemist on kahemõõtmeliste massiividega, on ka töötlemismeetod lahutamatu.
$arr = [
    ['name' => 'a'],
    ['name' => 'b'],
    ['name' => 'c']
];
array_walk($arr, funktsioon (&$item) {
    $item['nimi'] = $item['nimi'] . '_i';
});
print_r($arr); [['name' => 'a_i'], ['name' => 'b_i'], ['name' => 'c_i']];


4、for
See peaks olema väga üldine süntaks
$arr = ['a', 'b', 'c'];
for ($i = 0; $i < loend ($arr); ++$i) {
    $arr[$i] = $arr[$i] . '_i';
}
print_r($arr); ['a_i', 'b_i', 'c_i'];
Ei soovitata. See ei ole nii tõhus kui foreach. Ja kirjutamismeetod on veidi kohmakam kui Forereach.


5、igaüks
Haha, see funktsioon on PHP7.2-s @deprecated hüljatud ja tundub eriti vanamoodne. Selle kirjutamismeetodi teostustõhusus pole samuti hea ning algajad peaksid kohe loobuma.
$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
Täpsemalt öeldes ei ole see lihtsalt funktsioon, mida saab lähtestada, vaid ka mitme sisseehitatud funktsiooni kombinatsioon, mida põhimõtteliselt ei kasutata koodi kirjutamiseks
$arr = ['a', 'b', 'c'];
reset() pointer pähe, tegelikult on vaikimisi osutada algusele, seda lauset võid ignoreerida
reset($arr);
current(), et saada praeguse osuti elementide väärtus
samal ajal ($value = current($arr)) {
    key(), et saada praeguse osuti elementide indeks
    $arr[key($arr)] = $value . '_i';
    järgmine() viide järgmisele
    next($arr);
}
print_r($arr); ['a_i', 'b_i', 'c_i'];





Eelmine:[Praktiline lahing] ASP.NET tuumade pakendamine pildi NUGET ajapiirangu probleemiks
Järgmine:Kindeditori redaktori massiline üleslaadimise pildilaiendused (ilma flash-sõltuvuseta)
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com