IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Tableaux] Tableau : compter des valeurs identiques


Sujet :

Langage PHP

  1. #1
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut [Tableaux] Tableau : compter des valeurs identiques
    Bonjour à tous,

    Soit un fichier txt de compteur simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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() ?

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Salut Renaud,

    Comment va ?
    Effectivement, tu peux faire avec 'array_count_values()' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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>';
      }
    ?>

  3. #3
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Hello Jérôme ! Tout va bien sous le beau soleil Clermontois !
    Merci du tuyau...c'est impec.

    Bonne fin de journée.

  4. #4
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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à...

  5. #5
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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']);

  6. #6
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    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...

  7. #7
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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>";

Discussions similaires

  1. [Débutant] Compter des valeurs identiques sur une colonne Gridview
    Par dragoon25 dans le forum C#
    Réponses: 18
    Dernier message: 28/05/2014, 13h52
  2. [PHP 5.2] [Tableaux] Tri naturel des valeurs d'un tableau
    Par Riko63 dans le forum Langage
    Réponses: 3
    Dernier message: 03/07/2009, 08h14
  3. Réponses: 8
    Dernier message: 28/12/2008, 17h08
  4. [Tableaux] Comment aditionner des valeurs d'un tableau
    Par vimarty dans le forum Langage
    Réponses: 3
    Dernier message: 04/01/2008, 11h34
  5. [Tableaux] Tableau: trier par valeurs identiques
    Par renaud26 dans le forum Langage
    Réponses: 2
    Dernier message: 25/12/2007, 10h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo