Jump to content
php.lv forumi

While cikla nosacījums


briedis

Recommended Posts

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 by briedis
Link to comment
Share on other sites

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 by briedis
Link to comment
Share on other sites

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 by Kavacky
Link to comment
Share on other sites

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)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...