Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/09/2008, 10h14   #1
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 49
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Par défaut [Tableaux] Tableau : compter des valeurs identiques

Bonjour à tous,

Soit un fichier txt de compteur simple :

Code :
1
2
3
4
5
6
7
8
9
 
90.52.47.214|28-09-2008
90.50.4.156|28-09-2008
10.22.33.120|28-09-2008
10.22.35.132|28-09-2008
90.52.47.414|29-09-2008
90.50.4.856|29-09-2008
10.22.33.520|29-09-2008
10.22.35.120|29-09-2008
Je récup les lignes dans un tableau avec
Code :
1
2
3
4
5
6
7
 
$tab = file("lefichier.txt");
//j'extrais les dates avec
foreach($tab as $val){
$d = explode("|", $val);
$date = $d[1];
}
Et c'est là que je sèche...car je voudrais compter le nombre de lignes du tableau mais par dates identiques, de façon à obtenir :
28-09-2008 : 4
29-09-2008 : 4
array_count_values() ?
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2008, 11h48   #2
Membre Expert
 
Inscription : août 2002
Messages : 1 036
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 1 036
Points : 1 166
Points : 1 166
Salut Renaud,

Comment va ?
Effectivement, tu peux faire avec 'array_count_values()' :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
  $fichier = 'test.txt';
  $ligne = file($fichier);
  $element = array();
  foreach ($ligne as $cle => $valeur)
  {
    $tmp = explode('|', $valeur);
    $element[] = $tmp[1];
  }
 
  $nombre = array_count_values($element);
  foreach ($nombre as $cle => $valeur)
  {
    echo $cle . ' => ' . $valeur . '<br>';
  }
?>
jeca est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2008, 12h38   #3
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 49
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Hello Jérôme ! Tout va bien sous le beau soleil Clermontois !
Merci du tuyau...c'est impec.

Bonne fin de journée.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2008, 08h58   #4
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 49
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Bonjour à tous, je me permets d'enlever le tag "Résolu" de ce post car je bute sur un autre aspect du problème :

Je reprends mon fichier exemple, et donc le tableau issu de file("fichier.txt"), mais j'y mets une 3ème colonne et un doublon sur l'IP :

Code :
1
2
3
4
5
6
7
8
9
90.52.47.214|28-09-2008|toto
90.50.4.156|28-09-2008|tata
10.22.33.120|28-09-2008|tutu
10.22.33.120|28-09-2008|tutu
90.52.47.414|29-09-2008|lala
90.50.4.856|29-09-2008|lolo
10.22.33.520|29-09-2008|lulu
10.22.33.520|29-09-2008|coco
Mon but est de compter les IP uniques par jour...
Si je passe le tableau par array_unique(), les 2 lignes bleues seront dédoublonnées puisque elles sont parfaitement identiques. Par contre, les 2 rouges ne le seront pas : le 3ème élément est différent. Hors je voudrais aussi les dédoublonner...
Comment faire pour dédoublonner sur le 1er élément et obtenir :
28-09-2008 : 3
29-09-2008 : 3 (et non 4)

Je suis un peu largué, là...
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2008, 16h08   #5
Membre chevronné
 
Avatar de Montor
 
Inscription : avril 2008
Messages : 762
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 762
Points : 643
Points : 643
bonjour
j'ai deplacé la colonne de date .
28-09-2008|90.52.47.21|4toto
28-09-2008|90.50.4.156|tata
28-09-2008|10.22.33.120|tutu
28-09-2008|10.22.33.120|tutu
29-09-2008|90.52.47.414|lala
29-09-2008|90.50.4.856|lolo
29-09-2008|10.22.33.520|lulu
29-09-2008|10.22.33.520|coco

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
 $fichier = 'test.txt';
 $ligne = file($fichier);
foreach ($ligne as $cle => $valeur)
  {
   $trestrf = explode('|', $valeur);
   $inp =&$tmps;
    for ($trei = 0;  $trei < count($trestrf);  $trei++ )
	{
     $m=$trestrf[$trei];
	if(!is_array($inp[$m]))$inp[$m]='';
	  $inp=&$inp[$m];
  	}
  }
 
echo count($tmps['29-09-2008']);
Montor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2008, 20h06   #6
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 49
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Mille excuses...je n'ai pas reçu le mail de notif.

Ta piste est bonne, effectivement...sauf que je ne peux pas mettre la date "en dur"... et si mets quoi que ce soit dans le foreach, j'affiche autant de lignes de résultat qu'il y en a dans le txt...
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2008, 12h51   #7
Membre chevronné
 
Avatar de Montor
 
Inscription : avril 2008
Messages : 762
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 762
Points : 643
Points : 643
voici cette fonction "count_val" avec trois parametres
param1 tableau d'entree
param2 valeur a rechercher
param3 colonne de recherche
utiliser count(count_val(,,,)) pour savoir le nombre de valeur
et la fonction push pour les recuperer
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 
<?php
function count_val($input,$key,$col)
{
	$keys=array_flip(array_keys($input));
	foreach($input as $cle=>$valeur)
	{
		$tab=explode('|',$valeur);
		$k=array_splice($tab,$keys[$col],1);
		$tab=array_merge($k,$tab);
		$inp=& $tmps;
		for($i=0; $i<count($tab); $i++)
		{
			$j=$tab[$i];
			if(!is_array($inp[$j]))$inp[$j]='';
			$inp=& $inp[$j];
		}
	}
	return $tmps[$key];
}
function push(& $out,$inp,$ar=array())
{
	if(is_array($inp))
	{
		foreach($inp as $key=>$val)
		{
			$temp=$ar;
			$temp[]=$key;
			push(& $out,$val,$temp);
		}
	}
	else
	{
		$out[]=$ar;
	}
}
$fichier='test.txt';
$ligne=file($fichier);
$out=array();
echo count(count_val($ligne,'28-09-2008',1));
push($out,count_val($ligne,'28-09-2008',1));
echo "<pre>";
print_r($out);
echo "</pre>";
Montor est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h34.


 
 
 
 
Partenaires

Hébergement Web