Autor Zpráva
qteck
Profil
čus,

tenhle script mi generuje undefined offsets a nevím jak bych to měl ošetřit. Mohl by mě někdo nakopnout správný směrem? Díky.

function makeItHash ($tag)
{
    $x = array(); //pro potlačení  php notice undefined variable
    
    foreach ($tag as $key1 => $val1)
    {
            $e = explode(' ', $val1);

            
            foreach ($e AS $val)
            {                
                $x[$key1] .= ucfirst($val);  //undefined offsets
                
            }         
    }


    return $x;
    
}
Joker
Profil
qteck:
Tak pokud $x = array();, tj. prázdné pole, logicky nebude existovat $x[$key1].
qteck
Profil
jasně, ale jakým způsobem to teda přepsat?

já tuhle pasážpovažuju za definici
$x[$key1] .= ucfirst($val);

ale si to tak není.

Co s tím teda můžu dělat?


oh, jasně otestoval jsem to:

function makeItHash ($tag)
{
    $x = array();
    
    foreach ($tag as $key1 => $val1)
    {
            $e = explode(' ', $val1);

            
            foreach ($e AS $val)
            {                
                if(!isset($x[$key1]))
                {
                    $x[$key1] = ucfirst($val);
                } else
                {
                    $x[$key1] .= ucfirst($val);
                }
                
            }         
    }


    return $x;
    
}



Díky
Joker
Profil
qteck:
Tak nějak, nebo se to rozhodování může udělat ještě před vnitřním cyklem:

function makeItHash ($tag)
{
    $x = array();
    foreach ($tag as $key1 => $val1)
    {
        $e = explode(' ', $val1);
        if (!isset($x[$key1])) {
          $x[$key1] = "";
        }
    
        foreach ($e AS $val)
        {                
           $x[$key1] .= ucfirst($val);
        }         
    }
 
    return $x;
}
Alphard
Profil
Nebo rovnou
$x[$key1] = implode('', array_map('ucfirst', explode(' ', $tagString)));

Joker [#4]:
Tam ta podmínka na 7. řádku je přebytečná. $key1 musí být unikátní, takže lze řetězec inicializovat vždy.
Joker
Profil
Alphard:
To je pravda.
Já to z nějakého důvodu celou dobu beru tak, že to pole $x může už mít nějaký předchozí obsah.
qteck
Profil
Díky kluci.


a tenhle záps je vážně cool :)
$x[$key1] = implode('', array_map('ucfirst', explode(' ', $tagString)));

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