2010-07-24 8 views
-1

$ djs_all_num = mysql_num_rows ($ djs_all_db); while ($ djs_all = mysql_fetch_array (djs_all_db de $)) { if ($ djs_all_num% "2") {PHP% opérateur, quel résultat doit être retourné?

Avec ma déclaration if(), ce qui devrait réduire de moitié le nombre de lignes, et donc dans l'autre plus loin il devrait afficher le reste.

Est-ce correct?

Répondre

6

Cela ne réduit pas de moitié le nombre de pièces. Il donne le reste avec 2 comme diviseur. Ce sera 0 si pair, 1 si impair. Donc si djs_all_num est impair, il entrera dans l'instruction if. Vous devriez écrire 2 à la place. L'utilisation de la conversion implicite de string en int est déroutante et inutile.

Notez que cela ne fonctionne pas par ligne, puisque l'opérande gauche est le nombre total de lignes, pas l'indice de ligne. Pour utiliser un index de ligne, faire quelque chose comme:

$row_ind = 0; 
$djs_all_num = mysql_num_rows($djs_all_db); 
     while($djs_all = mysql_fetch_array($djs_all_db)) { 
     if ($row_ind++ % 2) { 
+0

Je n'arrive jamais à faire fonctionner l'autre, pourquoi? – Sam

+0

Il ne réduit pas de moitié tout, mais il devrait "scinder" mes lignes en deux groupes. – Sam

+0

@ Sam, si votre nombre de lignes est toujours impair, le si sera toujours exécuté. Si vous souhaitez alterner entre les lignes, vous devez utiliser un index de ligne, pas le nombre de lignes. –

1

L'opérateur% alias Modulus (modifier) ​​détermine s'il y avait un reste (/ modifier). Utilisé assez souvent pour déterminer les rangées impaires/paires.

Donc un 1% 2 serait égal à .5 (Je pense que si mes maths sont corrects). 2% 2 = 0.

Espérons que ça aide.

EDIT: Désolé fait quelques tests locaux et trouvé ma déclaration était incorrecte, modifiée pour être correcte.

Questions connexes