Comparer 2 nombres php

Résolu/Fermé
hipnothyze Messages postés 47 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 19 novembre 2009 - 17 nov. 2009 à 12:07
hipnothyze Messages postés 47 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 19 novembre 2009 - 19 nov. 2009 à 10:25
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 !!
A voir également:

23 réponses

Tsunami Chups Messages postés 224 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 21 juillet 2010 12
17 nov. 2009 à 12:56
Pourquoi ne pas essayer tout bêtement ?
if($tab[$i] === $ligne)
{

}
else
{
}
0
hipnothyze Messages postés 47 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 19 novembre 2009 1
17 nov. 2009 à 13:36
Cela donne le meme résultat !!
0
Pilow Messages postés 400 Date d'inscription vendredi 2 octobre 2009 Statut Membre Dernière intervention 23 décembre 2009 71
17 nov. 2009 à 13:43
if($tab[$i] === $ligne) 


J'aurai essayé avec == plutot


Sinon tu peux utiliser un stripos vu la compléxité de tes nombre et si tu es sure de n'avoir aucune "mauvaise" valeur, stripos($chaine, $plop) va vérifier si la chaine $plop se trouve dans $chaine et retourner FALSE si elle n'y est pas et un int si elle y est.


if (stripos("truc".$tab[$i], $ligne))
{

}
else
{

}

Ps : moi je rajoute une chaine de caractere avant le premier argument car la fonction stripos te retourne le numero du caractere a partir duquel la chaine $ligne est retrouvé dans le premier argument, par exemple stripos("test", "test") retournera 0, car "test" est similaire a "test" a partir du caractère 0, et donc fera capoter ton test car 0 est une valeur nulle.

Je sais pas si c'est 1/ bien de faire ça, 2/ clair comme explication
0
Tsunami Chups Messages postés 224 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 21 juillet 2010 12
17 nov. 2009 à 14:09
=== s'est pour verrifier l'egaliter et aussi l'egaliter du type de variable, mais == ca marche aussi oui
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Pilow Messages postés 400 Date d'inscription vendredi 2 octobre 2009 Statut Membre Dernière intervention 23 décembre 2009 71
17 nov. 2009 à 14:12
Autant pour moi alors, je croyais que ça concernait uniquement le type de variable et non le contenu.
0
Tsunami Chups Messages postés 224 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 21 juillet 2010 12
17 nov. 2009 à 14:30
nan les deux ^^

ca a sont utiliter mais pas tout le temps, s'est vrai que la ....
s'etait pas util
0
hipnothyze Messages postés 47 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 19 novembre 2009 1
17 nov. 2009 à 14:37
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.
0
hipnothyze Messages postés 47 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 19 novembre 2009 1
18 nov. 2009 à 08:30
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
0
Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
18 nov. 2009 à 09:08
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...
0
Tsunami Chups Messages postés 224 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 21 juillet 2010 12
18 nov. 2009 à 09:37
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)
0
Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
18 nov. 2009 à 10:08
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
0
Tsunami Chups Messages postés 224 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 21 juillet 2010 12
18 nov. 2009 à 10:16
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
0
Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
18 nov. 2009 à 10:23
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...
0
Tsunami Chups Messages postés 224 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 21 juillet 2010 12
18 nov. 2009 à 10:24
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 ^^)
0
Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
18 nov. 2009 à 10:30
je suis d'accord pour count() mais l'intéressé ne répond plus...
0
Tsunami Chups Messages postés 224 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 21 juillet 2010 12
18 nov. 2009 à 10:32
lol, sans doute la meme demande en parralelle ^^'
0
hipnothyze Messages postés 47 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 19 novembre 2009 1
18 nov. 2009 à 11:15
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.
0
hipnothyze Messages postés 47 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 19 novembre 2009 1
18 nov. 2009 à 17:05
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
0
Tsunami Chups Messages postés 224 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 21 juillet 2010 12
18 nov. 2009 à 17:21
Oula

pourquoi ne pas utiliser while($fichier = mysql_fetch_array($result)) { ... }

tu utilise quoi comme SGBD ?
0
Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
18 nov. 2009 à 17:23
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émentation
for($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...
0