fonction pour séparer un nombre

Eléphanteau du PHP | 28 Messages

03 déc. 2007, 11:56

Bonjour a tous

voila, j'aimerais créer un bout de code pour que aprés avoir récupérer le nombre de ligne dans un fichier je puisse séparer ce nombre en unité dizaine centaine ...

Pour n'avoir qu'un seul chiffre a chaque fois et ainsi utiliser ces chiffre séparement pour affichier un gif différent

-> pour afficher sur ma page principal le nombre de visiteur

Si vous avez une méthode courte
car j'ai bien penser a faire plusieurs cas:

si nb<10000
diviser par 1000 et on a le 4ieme nb
modulo de nb puis divisé par 100 poru avoir le 3ieme nb
...
Si nn <1000
...

mais çà va être long :P

d0m
Mammouth du PHP | 1141 Messages

03 déc. 2007, 12:29

Salut,

Tu peux utiliser le nombre comme une chaine de caractères.
Ensuite grace aux fonctions sur les chaines, tu peux récupérer chaque caractère et donc chaque chiffre.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

03 déc. 2007, 12:35

En complément de ce qu'a dit d0m, avec php, chaque chaine est considérée comme un tableau.
Ainsi, si une variable contient la chaine "azerty", tu peux accéder à chacune des lettres en spécifiant son index comme tu le ferais pour un tableau :
$var = "azerty";
echo $var[0]; // afficher "a"
echo $var[1]; // afficher "z"
...
Tu peux ainsi boucler sur chacune des lettres (et dans ton cas des chiffres) pour les extraire et effectuer le traitement souhaité :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 28 Messages

03 déc. 2007, 14:39

merci

j'ai tester tout çà, mais çà marche pas (ou j'ai fait une erreur :P)

je vous montre mon bout de code:
<?php						
	if (file_exists(Win2UnixShlash(dirname(__FILE__).'\modules\compteur\cpt_compteur.php')))
	{		  
		$LesLignes3 = file(Win2UnixShlash(dirname(__FILE__).'\modules\compteur\cpt_compteur.php'));
      		$nb = count($LesLignes3)-1;
				
		echo '<a href="/dirsys/modules/compteur.php" target="main">';
		for($i=0 ; $i<=(strlen($nb)-1) ; $i++)
			{echo '<img src="/modules/compteur/img/'.$nb[$i].'.gif" alt="Nombre de Visiteurs" title"Nombre de Visiteurs" />';}
		echo'</a>';
	}
?>
Si j'ai 21 dans $nb, il affiche bien 2 images, mais il m'affiche pas les images, il m'affiche le alt.
Donc je dois avoir une erreur dans mes variable $nb et $i dans mon img src

Je vois plus, vous voyez vous ???

Eléphanteau du PHP | 28 Messages

03 déc. 2007, 14:46

j'ai aussi essayé avec la fonction substr(variable_de_recherche, départ, fin)

mais çà me fait pareil, çà m'affiche que les alt

d0m
Mammouth du PHP | 1141 Messages

03 déc. 2007, 15:00

attention, il faut travailler sur une chaine de caractère, toi tu travaille sur des entiers (résultat de la fonction count) :
$nb = count($LesLignes3)-1; 
avant de pouvoir récupérer ses différents chiffres, il faut le convertir en chaine de caractère.
Par exemple en utilisant la fonction strval

Eléphanteau du PHP | 28 Messages

03 déc. 2007, 15:07

$LesLignes3 = file(Win2UnixShlash(dirname(__FILE__).'\modules\compteur\cpt_compteur.php'));
$nbint = count($LesLignes3)-1;
$nb = strval($nbint);
				
for($i=0 ; $i<=(strlen($nb)-1) ; $i++)
	{echo '<img src="/modules/compteur/img/'.$nb[$i].'.gif" alt="Nombre de Visiteurs" title"Nombre de Visiteurs" />';}
(j'ai viré ce qu'il ne nous intéresse pas...

en faisant comme çà, çà me fait pareil, que le alt d'afficher (2 fois car $nb=23)
Modifié en dernier par lkaiman le 03 déc. 2007, 15:07, modifié 1 fois.

ViPHP
ViPHP | 2287 Messages

03 déc. 2007, 15:07

Voici non pas une, mais deux fonctions qui feront le boulot. A toi de voir celle que tu préfères ou que tu comprends le mieux, les deux marchent :-) )

Elles attendent deux paramètres : le premier est le nombre à découper. Le deuxième est un booléen qui te permet de mettre à l'envers le résultat (Si tu souhaites avoir le chiffre des centaines de milliers en premier dans le tableau de résultat par exemple, et non pas le chiffre des unités... C'est souvent mieux pour l'afficher dans le sens de lecture).


function split_number_bynum($number,$reverse=true){
	if($reverse) $number=strrev($number);

	$chiffres=array();

	$numbercopy=$number;
	while($numbercopy>=10){
		$chiffres[]=$lastchiffre=$numbercopy%10;
		$numbercopy=($numbercopy-$lastchiffre)/10;
	}
	$chiffres[]=$numbercopy;

	return ($chiffres);
}


function split_number_bystring($number,$reverse=true){
	if($reverse) $number=strrev($number);

	$chiffres=array();

	$numbercopy=$number;
	while(strlen($numbercopy)>1){
		$chiffres[]=substr($numbercopy,-1,1);
		$numbercopy=substr($numbercopy,0,strlen($numbercopy)-1);
	}
	$chiffres[]=$numbercopy;

	return ($chiffres);
}
Dans les deux cas, voici ce que tu obtiens :
$number=945647872;
$chiffres=split_number_bystring($number,true);
print_r($chiffres);

Code : Tout sélectionner

Array ( [0] => 9 [1] => 4 [2] => 5 [3] => 6 [4] => 4 [5] => 7 [6] => 8 [7] => 7 [8] => 2 )
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphanteau du PHP | 28 Messages

03 déc. 2007, 15:18

Yesssssssss

c'est bon çà marche

merci pour vos réponses

bonne journée ;)

voir le résultat la: http://iup.geii.free.fr/

j'ai modifié presque tout les modules, et mis ma touche personnelle, merci a vous pour le compteur ;)

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

03 déc. 2007, 15:49

Modération :
lkaiman, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

03 déc. 2007, 15:57

@Calimero : euh, c'est moi ou ton truc fait un
function lolwut($str)
{
    return str_split($str, 1);
}
:?:

Note : sous PHP4 il vous faut PHP_Compat, mais ce qu'il vous faut surtout, c'est changer d'hébergeur; même Free est en PHP5

Eléphanteau du PHP | 28 Messages

03 déc. 2007, 16:12

pas sur, mais je crois avoir essayé str_split ()
et que çà me mettait une fatal_error, fonction inconnu

Mais bon, çà marche, c'est le principal