Autor Zpráva
učenec
Profil *
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);
                }
a toto už šlo

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
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
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);
}

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0