Comparer 2 nombres php
Résolu
Bonjour,
J'ai un problème lors de la comparaison de 2 nombres !
En fait je récupère un nombre de 12 chiffres d'un fichier txt pour le comparer à un tableau de nombre que j'ai récupéré d'une base de donnée. Lors de cette comparaison mon code doit me retourner 1 ou 0 voyant si le nombre est déja dans le tableau. Mais lorsque celui si s'y trouve déjà, il me dit que les 2 nombre sont différents et me retourne donc 0 ( au lieu de 1).
J'ai vérifié la taille de mes variables et pour mon nombre le string est de 14 et celle du nombre de mon tableau fait 13!! je pense donc que les problème vient d'ici mais je ne sais pas comment le résoudre !!
Voici le code que j'ai réalisé :
for ($i=0;$i<sizeof($tab);$i++)
{
if (strcmp($tab[$i],$ligne) == 0 )
{
$double[$i] = 1;
}else
{
$double[$i] = 0;
}echo $double[$i].'<br/>';
}
Avec ce code cela :
1er nombre taille nombre du tablo taille valeur de retour
002410020003 13 002392430043 14 0
002410020003 13 002392430081 14 0
002410020003 13 002392430125 14 0
002410020003 13 002392460134 14 0
002410020003 13 002392510062 14 0
002410020003 13 002392520192 14 0
002410020003 13 002392540134 14 0
002410020003 13 002392580125 14 0
002410020003 13 002410010006 14 0
002410020003 13 002410020003 14 0
Sur la dernière ligne la valeur de retour devraitdonc etre 1!!
merci d'avance pour l'aide !!
J'ai un problème lors de la comparaison de 2 nombres !
En fait je récupère un nombre de 12 chiffres d'un fichier txt pour le comparer à un tableau de nombre que j'ai récupéré d'une base de donnée. Lors de cette comparaison mon code doit me retourner 1 ou 0 voyant si le nombre est déja dans le tableau. Mais lorsque celui si s'y trouve déjà, il me dit que les 2 nombre sont différents et me retourne donc 0 ( au lieu de 1).
J'ai vérifié la taille de mes variables et pour mon nombre le string est de 14 et celle du nombre de mon tableau fait 13!! je pense donc que les problème vient d'ici mais je ne sais pas comment le résoudre !!
Voici le code que j'ai réalisé :
for ($i=0;$i<sizeof($tab);$i++)
{
if (strcmp($tab[$i],$ligne) == 0 )
{
$double[$i] = 1;
}else
{
$double[$i] = 0;
}echo $double[$i].'<br/>';
}
Avec ce code cela :
1er nombre taille nombre du tablo taille valeur de retour
002410020003 13 002392430043 14 0
002410020003 13 002392430081 14 0
002410020003 13 002392430125 14 0
002410020003 13 002392460134 14 0
002410020003 13 002392510062 14 0
002410020003 13 002392520192 14 0
002410020003 13 002392540134 14 0
002410020003 13 002392580125 14 0
002410020003 13 002410010006 14 0
002410020003 13 002410020003 14 0
Sur la dernière ligne la valeur de retour devraitdonc etre 1!!
merci d'avance pour l'aide !!
23 réponses
-
Bonjour,
Merci pour votre aide mais c'est bon j'ai enfin trouvé !!
La comparaison entre les nombre ne se faisait pas car les string n'étaient pas de la même taille(alors que les nombres font 12 chiffres!!)
J'ai donc comparer mes nombres en utilisant la fonction substr() pour ne prendre qu'une partie du nombre!! Et cela fonctionne très bien même si cela reste un peu de la bidouille !!
Merci à vous et à plus tard pour de nouvelle aventure.... -
oui peut importe c'était un exemple...
-
les deux derniere lignes de code sont fausse les varriable sont pas les meme
je me permet de rectifier
$array_lenght = count($array); for($i = 0;$i < $array_lenght; $i++);
-
je ne connais pas odbc mais si ca reviens a utiliser mysql_fetch_row()
tu peux soit faire ton test directement dans while
soit faire le tableaux comme tu le fais
ou au lieu de faire $tab[$i] = 'valeur;
tu peux faire $tab[] = 'valeur';
c'est un peut comme si tu faisais $variable .= 'suite de la chaine';
sinon perso c'est rare que je compte dans les tableaux
j'utilise :
foreach($array as $key => $value); foreach($array as $value);
et si j'ai vraiment besoin d'une incrémentationfor($i = 0; isset($array[$i]); $i++);
le problème c'est que ça fait le teste à chaque tour mais c'est pas énorme comme test
ensuite tu peux faire$arrayLenght = count($array); for($i = 0;$i < $array_lenght; $i++);
met là il y a encore un test à chaque boucle alors je ne suis pas sur de ce qui est le plus optimisé entre un test d'existence et un test d'infériorité...
en même temp on se dit que l'existance est forcément testée sinon il y a erreur donc pourquoi ne pas ce limiter à ça... -
Oula
pourquoi ne pas utiliser while($fichier = mysql_fetch_array($result)) { ... }
tu utilise quoi comme SGBD ? -
bonjour,
cela ne fonctionne toujours pas car le tableau avec lequel je compare ($tab) je le récupère d'une base de données donc je ne connais pas sa taille !!
Je ne fais donc pas un array mais ceci :
while (odbc_fetch_row($result))
{
$fichier = odbc_result($result,'no_civiere');
$tab[$i] = $fichier;
$i++;
}
Et je n'arrive pas a faire fonctionner le fonction "in_array" avec mon $tab[$i]!!
Un petit coup de pouce ...
Merci d'avance -
Merci d'avoir répondu, je cherchais de mon coté, voila pourquoi je ne répondait pas !!
Je vais tester cela et je vous redit sa o plus vite !!!
Merci encore. -
lol, sans doute la meme demande en parralelle ^^'
-
je suis d'accord pour count() mais l'intéressé ne répond plus...
-
Mouais ^^ chacun ca maniere de faire apres, mais je ne suis pas trop fan ^^'
(autant pour moi donc), par contre count() je pense que s'est simple et mieux (ca ce retien facilement ^^) -
j'ai pris l'habitude de faire ça quand je teste plusieur truc à la fois c'est plus simple pour jongler après...
il y a même plus simple :
/* code 1 /*/ code 2 //*/
si on rajoute un / devant le premier /* ça met le second en commentaire et si on l'enlève c'est le premier qui y est... -
Ah oui merde ^^' ,
Pour les boucle oui elles sont pas commenter mais y a des //* dont tu pourrais te passer ^^ ca peu porter a confusion comme ca -
mais non il n'y a qu'une boucle de commentée
c'est plus simple pour jonglé entre les deux de cette manière
et en plus tu ne réponds pas à la bonne personne...
le code que j'ai mis au dessus fonctionne même s'il est vrai que count() aurait était plus approprié, j'ai repris son code de départ pour essayer de le comprendre et voir ce qui pouvait poser problème...
et les 2 boucles au dessus fonctionne sur php 5.3 -
Ba y a un petit probleme (grossier meme ), s'est que tu as commenté tes deux boucles ... donc ca ne risque pas de marche et ensuite je te conseile plutot count($tab) que sizeof($tab)
-
bonjour,
c'est bien à ça que le code dois ressembler? :
<?php $tab = array( 002392430043, 002392430081, 002392430125, 002392460134, 002392510062, 002392520192, 002392540134, 002392580125, 002410010006, 002410020003 ); $ligne = 002410020003; /* for ($i=0;$i<sizeof($tab);$i++) { if ($tab[$i] == $ligne ) $double[$i] = 1; else $double[$i] = 0; echo $double[$i].'<br/>'; } //*/ //* for ($i=0;$i<sizeof($tab);$i++) { if (strcmp($tab[$i],$ligne) == 0 ) $double[$i] = 1; else $double[$i] = 0; echo $double[$i].'<br/>'; } //*/ ?>
si c'est bien à ça que le code dois ressembler ça fonctionne chez moi dans les deux cas... -
Bonjour,
Cela ne fonctionne toujours pas avec stripos()!!
cela m'affiche :"Fatal error: Call to undefined function: stripos() in C:\....."
Quelqu'un aurait une idée svp??
Merci -
J'ai déjà essayé === et ==, les 2 ne fonctionne pas puisque les variable ne font pas la même taille!!
Je vais donc essayé le fonction stripos() dès que possible !!
Merci. -
nan les deux ^^
ca a sont utiliter mais pas tout le temps, s'est vrai que la ....
s'etait pas util -
Autant pour moi alors, je croyais que ça concernait uniquement le type de variable et non le contenu.
-
=== s'est pour verrifier l'egaliter et aussi l'egaliter du type de variable, mais == ca marche aussi oui
- 1
- 2
Suivant