Page 1 sur 1

fonction pour séparer un nombre

Posté : 03 déc. 2007, 11:56
par lkaiman
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

Posté : 03 déc. 2007, 12:29
par d0m
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.

Posté : 03 déc. 2007, 12:35
par Ryle
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é :)

Posté : 03 déc. 2007, 14:39
par lkaiman
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 ???

Posté : 03 déc. 2007, 14:46
par lkaiman
j'ai aussi essayé avec la fonction substr(variable_de_recherche, départ, fin)

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

Posté : 03 déc. 2007, 15:00
par d0m
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

Posté : 03 déc. 2007, 15:07
par lkaiman
$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)

Posté : 03 déc. 2007, 15:07
par Calimero
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 )

Posté : 03 déc. 2007, 15:18
par lkaiman
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 ;)

Posté : 03 déc. 2007, 15:49
par Truc
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.

Posté : 03 déc. 2007, 15:57
par Hubert Roksor
@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

Posté : 03 déc. 2007, 16:12
par lkaiman
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