Autor | Zpráva | ||
---|---|---|---|
učenec Profil * |
#1 · Zasláno: 6. 7. 2014, 18:43:26 · Upravil/a: učenec
Ahoj,
měl sem pole ve kterém byly hodnoty uzavřené v '' např. jedna hodnota byla 'auto' dalsi 'motorka' atd... těch uvozovek jsem se chtěl zbavit tak jsem použil foreach($vals as $val) { $val = str_replace($vowels, "", $val); } a toto nešlo...trošku jsem googlil a zjistil že to mám použít s referencí tedy: foreach($vals as &$val) { $val = str_replace($vowels, "", $val); } chápu co je reference...ukazuje na nějaká data např. $a = 45; $b = &$a tedy $b taky ukazuje na 45. Ale nechápu jak to funguje v tom poli, co se tam konkrétně dělo. Byl by někdo schopný mi to vysvětlit? :D Děkuji. zapomněl jsem dodat $vowels = "'"; |
||
Alphard Profil |
#2 · Zasláno: 6. 7. 2014, 19:42:39
V zásadě to chápete správně. Zřejmě stačí jen dodat, že reference může ukazovat na konkrétní prvek pole.
V manuálu u foreach je informace o tom, že normálně se proměnná hodnotového typu (tedy ne objekt) přiřazuje (assign). On each iteration, the value of the current element is assigned to $value Což, jak je vysvětleno u assignment operators, znamená vytvoření kopie. Note that the assignment copies the original variable to the new one (assignment by value), so changes to one will not affect the other. foreach tedy nedělá nic jiného, než že kopíruje hodnoty jako starší konstrukce s list($key, $value) = each($arr) . Když si to rozepíšete, uvidíte v tom operátor = explicitně. A jak tady fungují reference jste sám psal výše.
|
||
Tori Profil |
#3 · Zasláno: 6. 7. 2014, 20:08:47
učenec:
Ještě doplním - když takhle referencí měníte prvky v poli, je dobré za cyklem přidat unset($val); , čímž tu referenci odstraníte. Jinak by se mohlo stát, že o 300 řádků dál náhodou použijete stejný název proměnné a data v poli se vám změní nežádoucím způsobem.
Anebo alternativní zápis bez reference: foreach($vals as $key => $val) { $vals[$key] = str_replace($vowels, "", $val); } |
||
Časová prodleva: 10 let
|
0