Autor | Zpráva | ||
---|---|---|---|
Mannu Profil * |
#1 · Zasláno: 16. 6. 2009, 23:34:18
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 |
#2 · Zasláno: 16. 6. 2009, 23:44:38
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 |
#3 · Zasláno: 16. 6. 2009, 23:46:28 · Upravil/a: joe
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 |
#4 · Zasláno: 16. 6. 2009, 23:47:55
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 * |
#5 · Zasláno: 17. 6. 2009, 00:00:36
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 |
#6 · Zasláno: 17. 6. 2009, 00:36:27
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 |
#7 · Zasláno: 17. 6. 2009, 01:20:35
$var!=$variant ;) |
||
keeehi Profil |
#8 · Zasláno: 17. 6. 2009, 06:18:37
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 |
#9 · Zasláno: 17. 6. 2009, 07:57:25
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 |
#10 · Zasláno: 17. 6. 2009, 09:56:31
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í. |
||
Časová prodleva: 15 let
|
0