Autor Zpráva
Mannu
Profil *
Zdravím,
mám problém s načítáním položek z XML - pokud zjistím, že v dokumentu je např.
VARIANT name="a" a VARIANT name="b".
Mám teda následující nástin kódu:

$pocet=count($var); //zjistim si pocet polozek
for($j=0; $j<$pocet; $j++)
{
if($variant=="a")
echo 'vypis a';
elseif($variant=="b")
echo 'vypis b';
}


A problém je, že se mi vždycky jen ta první část - 'vypis a' 2x...

Zkoušel jsem to ještě podmínit podmínkama:
$x=0;
$pocet=count($var); //zjistim si pocet polozek
for($j=0; $j<$pocet; $j++)
{
if($variant=="a" &&$ x==0)
echo 'vypis a';
elseif($variant=="b" && $x==1)
echo 'vypis b';
$x=1;
}

...ale v tomto případě se mi vždy vypíše jen jedno 'vypis a'.

Nevěděli byste prosím poradit, jak udělat to, aby se mi vypsalo jednou A a
jednou B?
AM_
Profil
tak v tomhle maglajzu se vážně nevyznám. Ten první cyklus vždycky vypíše několikrát to samé, protože se v něm nic nemění, proměnná $variant zůstává stejná.
Druhý cyklus už vůbec nechápu, pokud je $variant rovno "a", vypíše se jednou 'vypis a', pokud je $variant 'b', vypíše se při všech průchodech kromě prvního, ve kterém se nevypíše nic 'vypis b'.
Co to má společného s XML jsem nějak nepochytil.
joe
Profil
Zkus si vypsat to, co máš v té proměnné a naučit se opravovat a zjišťovat problémy sám, nikdo to za tebe dělat v budoucnu nebude.
$pocet=count($var); //zjistim si pocet polozek
for($j=0; $j<$pocet; $j++)
{
echo "'" . $variant . "'<br>";

}

Podle toho uprav podmínky.

EDIT: Samozřejmě viz AM_, chápal jsem to tak, že to je skutečně jen nastíněný kód a doufám, že proměnnou $variant měníš v cyklu?
AM_
Profil
P.S. zbav se zásadní nemoci programátorů při psaní komentářů kódu:
píšeš si komentáře k řádkům, kde je nad slunce jasné, co dělají (že funkce count() zjistí počet položek), ale k té tvojí zmatené podmínce nevidím ani jednu řádku, což by bylo potřeba, protože se v ní zjevně dost ztrácíš.
Mannu
Profil *
AM_
jde o to, že si z XML dokumentu tahám data - a v několik případech se liší právě podle atributu,
<variant name="a">
<hodnota>bla1</hodnota>
<hodnota>bla2</hodnota>
</variant>

<variant name="b">
<hodnota>1</hodnota>
<hodnota>2</hodnota>
</variant>

v te promenne VARIANT je jednou "a", jednou "b"

Ale i když je tam "b", tak se mi text "vypis b" nikdy nevypíše
AM_
Profil
myslím, že jsem se vyjádřil dost jasně - proměnná $variant v tom cyklu je pořád stejná, musíš jí nějak přiřadit aktuální hodnotu :) něco jako $variant[$j], tam je ten problém. Ten druhý cyklus nedává vůbec smysl.
MrVain
Profil
$var!=$variant

;)
keeehi
Profil
MrVain
Co to je? Proměnná $var je pole a proměnná $variant zase string ve kterém je a nebo b -> nikdy se to rovnat nebude -> podmínka bude vždy pravdivá. Čeho tím však chceš dosáhnout?
Werewolf
Profil
Mannu [#5]:
text "vypis b" nikdy nevypíše
Samozřejmě že se nevypíše.
if(...) { ... } elseif(...) { ... } funguje tak, že pokud je první podmínka správná (if), tak se provede a s elseif se nic neděje. Elseif funguje jako alternativní řešení k podmínce, která je před ní. Můžeš mít if() {} elseif() {} elseif() {} elseif(){} a takhle donekonečna, ale pokud se už jedna podmínka provede, tak parser na všechny další s**e. Takže řešení toho kódu, který jsi sem postnul, je vyměnit to elseif za if. Jestli tam máš někde i jiné chyby nevím. Nemám možnost je vidět. (A teď, když dovolíš, se půjdu nasnídat.)
AM_
Profil
Werewolf
tak to asi ne.
if ($variant == 'a'){
 //kod (jedina podminka je ze tato vetev nezmeni promennou $variant, coz zde evidentne nemeni)
} elseif ($variant == 'b') {
 //kod
}

je totéž jako
if ($variant == 'a'){
 //kod
}
if ($variant == 'b') {
 //kod
}

jelikož $variant stejně nikdy nemůže být obojí najednou, takže to projde jen jednou větví.

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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