- Oroszok csomagolják ki a még be nem mutatott iPad Pro M5-öt
- Íme, a Moto X70 Air, vagyis Motorola Edge 70 minden oldalról
- Akciófigyelő: Komoly kedvezményekkel és ajándékokkal startol a Xiaomi 15T széria
- Bemutatta az Apple a Powerbeats Fit fülhallgatót
- Amikor a fókusz egy stapatelefon óraképernyőjén van
- Apple Watch
- Felpúposodott egy Galaxy Ring, a Samsung besegített
- One mobilszolgáltatások
- Apple iPhone Air - almacsutka
- iPhone topik
- Huawei Watch GT 6 és GT 6 Pro duplateszt
- Apple iPhone 17 - alap
- Okosóra és okoskiegészítő topik
- Ilyen lesz a Galaxy S26 Ultra
- Végre egy tényleg jó Duotts bringa! - E29 teszt
Új hozzászólás Aktív témák
-
válasz
Sk8erPeter #12214 üzenetére
$a = array(1, 2, 3, 4);
foreach($a as &$i) echo $i *= 2;
foreach($a as $i) echo $i;A két ciklus "kibontva" valahogy így nézne ki:
/*
* Első foreach
* Itt az 1, 2, 3, 4 tömbből a ref. foreach miatt 2, 4, 6, 8 lesz
*/
&$i = $a[0]; echo $i *= 2;
&$i = $a[1]; echo $i *= 2;
&$i = $a[2]; echo $i *= 2;
&$i = $a[3]; echo $i *= 2;
/*
* Itt $i változó a tömbünk utolsó eleme a referencia miatt
* Tehát ha $i értéke módosul, módosul a tömb utolsó eleme is
* A második foreach kavarodást okoz, mert megint $i-t használjuk:
*/
// A tömb utolsó eleme az első elem is lett egyben (!)
// Azaz a tömb értékei: 2, 4, 6, 2
$i = $a[0]; echo $i;
// Itt az utolsó elem a másodikkal osztozik: 2, 4, 6, 4
$i = $a[1]; echo $i;
// Harmadikkal: 2, 4, 6, 6
$i = $a[2]; echo $i;
// Végül saját magával, de ő a harmadikra mutat, így...
// ...marad ahogy volt: 2, 4, 6, 6
$i = $a[3]; echo $i;Tanulság:
Ha referenciás foreach-et használsz, a fura meglepetések és az akár több órás debuggolás elkerülése érdekében MINDEN ESETBEN töröld a referenciát az utolsó elemre a foreach után az unset() függvénnyel, ami az esetünkben $i, tehát:
// Így már jó lesz
$a = array(1, 2, 3, 4);
foreach($a as &$i) echo $i *= 2;
unset($i);
foreach($a as $i) echo $i;
Új hozzászólás Aktív témák
- HIBÁTLAN iPhone 13 mini 256GB Pink -1 ÉV GARANCIA - Kártyafüggetlen, MS3440, 90% Akkumulátor
- BESZÁMÍTÁS! MSI B550M WIFI R9 5900X 32GB DDR4 1TB SSD RX 6800XT 16GB Zalman Z1 PLUS Chieftronic 750W
- Samsung Galaxy A53 128GB, Kártyafüggetlen, 1 Év Garanciával
- AKCIÓ! Lenovo ThinkPad X13 Gen 5 üzleti notebook - Ultra 5 135U 16GB DDR5 512GB SSD Intel Win11
- Nagyakkus, mobilnetes - Dell Latitude 5330 i3-1215U 6mag! 16GB 1000GB 13.3" FHD 1 év gar
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest