Comparer 2 nombres php

Résolu
hipnothyze Messages postés 47 Date d'inscription   Statut Membre Dernière intervention   -  
hipnothyze Messages postés 47 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   12
 
Pourquoi ne pas essayer tout bêtement ?
if($tab[$i] === $ligne)
{

}
else
{
}
0
hipnothyze Messages postés 47 Date d'inscription   Statut Membre Dernière intervention   1
 
Cela donne le meme résultat !!
0
Pilow Messages postés 400 Date d'inscription   Statut Membre Dernière intervention   71
 
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   Statut Membre Dernière intervention   12
 
=== 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   Statut Membre Dernière intervention   71
 
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   Statut Membre Dernière intervention   12
 
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   Statut Membre Dernière intervention   1
 
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   Statut Membre Dernière intervention   1
 
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   Statut Membre Dernière intervention   274
 
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   Statut Membre Dernière intervention   12
 
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   Statut Membre Dernière intervention   274
 
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   Statut Membre Dernière intervention   12
 
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   Statut Membre Dernière intervention   274
 
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   Statut Membre Dernière intervention   12
 
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   Statut Membre Dernière intervention   274
 
je suis d'accord pour count() mais l'intéressé ne répond plus...
0
Tsunami Chups Messages postés 224 Date d'inscription   Statut Membre Dernière intervention   12
 
lol, sans doute la meme demande en parralelle ^^'
0
hipnothyze Messages postés 47 Date d'inscription   Statut Membre Dernière intervention   1
 
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   Statut Membre Dernière intervention   1
 
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   Statut Membre Dernière intervention   12
 
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   Statut Membre Dernière intervention   274
 
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