briedis Posted August 30, 2010 Report Share Posted August 30, 2010 (edited) Kāds var izskaidrot, kāpēc šis variants nestrādā. Tiek izmests notice par undefined row $data = mysql_query("SELECT * FROM files"); $result = array(); if(mysql_num_rows($data)){ while($row = mysql_fetch_assoc($data) && $result[] = $row); } Pēc manas loģikas, ja ir nosacījums ar and, kur pirmais neizpildās, otrais arī nemaz netiek izsaukts. piem if(false && doStuff()); do stuff nevajadzētu nemaz izpildīties. Piem, šajā variantā vispār tiek izvadīts "xxx", cikls izpildās tikai 1x, kaut reāli ir vairāki ieraksti. $data = mysql_query("SELECT * FROM files"); $row = "xxx"; if(mysql_num_rows($data)){ while($row = mysql_fetch_assoc($data) && var_dump($row)); } Šis protams izpildās ļoti labi: $result = array(); $data = mysql_query("SELECT * FROM files"); if(mysql_num_rows($data)){ while($row = mysql_fetch_assoc($data)){ $result[] = $row; } } Edited August 30, 2010 by briedis Quote Link to comment Share on other sites More sharing options...
rATRIJS Posted August 30, 2010 Report Share Posted August 30, 2010 (edited) Lieto 'and' -> '&&' vietā. btw iemesls kādēļ -> http://uk2.php.net/manual/en/language.operators.precedence.php Edited August 30, 2010 by rATRIJS Quote Link to comment Share on other sites More sharing options...
briedis Posted August 30, 2010 Author Report Share Posted August 30, 2010 (edited) What ze hell? :D Beidzot atradu doc'u.. http://www.php.net/manual/en/language.operators.precedence.php Tjipa, tā kā "=" skatās no labās puses, $row nemaz netiek uzsetots un tāpēc ir notice... Bet es tāpat nesaprotu, ar ko atšķiras && no and, jo viņi abi ir "no kreisās" tipa... EDIT: Tfu, es sapratu, tā tabula ir sakārtota pēc svarīguma :) Tagad zināšu, paldies :) Edited August 30, 2010 by briedis Quote Link to comment Share on other sites More sharing options...
Леший Posted August 31, 2010 Report Share Posted August 31, 2010 Kāpēc ne šādi? while($result[] = mysql_fetch_assoc($data)); array_pop($result); Quote Link to comment Share on other sites More sharing options...
Kavacky Posted August 31, 2010 Report Share Posted August 31, 2010 (edited) Pēc manas loģikas, ja ir nosacījums ar and, kur pirmais neizpildās, otrais arī nemaz netiek izsaukts. piem if(false && doStuff()); do stuff nevajadzētu nemaz izpildīties. Tas ir atkarīgs no valodas ( un varbūt arī kompilatora ) specifikas, un tev ir jāzina, ar ko tu sasienies. Palabojiet, ja esmu atcerējies nepareizi. Ir jau vairākas loģiskas pieejas: 1) ātrdarbība, kas pēc pirmās pārbaudes neveic lieku pārbaudi tālāk; 2) koda rakstīšanas ērtība - nu ērtāk taču ir "if ( doStuff() and doOtherStuff() and doSomethingElse() )" nekā "a = doStuff(); ... if ( a and b and c )", un tu zini, ka vienmēr tiks veikti visi izsaukumi. Edited August 31, 2010 by Kavacky Quote Link to comment Share on other sites More sharing options...
Леший Posted August 31, 2010 Report Share Posted August 31, 2010 2) koda rakstīšanas ērtība - nu ērtāk taču ir "if ( doStuff() and doOtherStuff() and doSomethingElse() )" nekā "a = doStuff(); ... if ( a and b and c )", un tu zini, ka vienmēr tiks veikti visi izsaukumi. Šeit tomēr pareizāk ir, ja a == false, tad pārējie nemaz nepildās. Piemēru ir kaudze, prastākais ir if (array_key_exists("id", $_POST) && $_POST["id"] != 0) Quote Link to comment Share on other sites More sharing options...
Kavacky Posted August 31, 2010 Report Share Posted August 31, 2010 To var izmantot dažādi. Šādā ienākošo datu apstrādē tas ir visnotaļ noderīgi. Bet funkcijā, kurai ir stingri uzdoti parametri, no šī piemēra jēgas nebūs. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.