Page 1 sur 1

[array] compter les occurences

Posté : 16 sept. 2009, 09:28
par barbapapa
Bonjour,

Je pars d'une liste de plusieurs lignes composés parfois de doublons :

michel
pierre
pierre
jean
luc
michel
pierre

Je souhaite obtenir le résultat suivant :

michel 2
pierre 3

Je souhaite exclure de mon résultat les occurences qui n'apparaissent qu'une seule fois dans la liste.

J'ai écris ça mais je ne suis pas satisfait du résultat :
<?php
$statut= $_POST['statut'] ;

$liste_s = file("http://www.biloute.fr/cgi-bin/A.pl?Format=EXCEL&code=$statut");

$code_p=array();

// je recupere ici la colonne 1 de mon fichier excel
for ($i=1; $i<count($liste_s); $i++) {
        $sisi = explode("\t",rtrim($liste_s[$i]));
        $code_p[] = $sisi[1];
}

$array = array_count_values($code_p);

$erreur = 0;

while (list ($key, $val) = each ($array)) {
        if ($val != 1)
        {
        $erreur++;
        echo "<pre>";
        echo "$key -> $val";
        echo "</pre>";

        }
}

echo "il y a $erreur sisi en erreur";
?>
Je suis sur qu'il doit y avoir une meilleure solution.

Merci de votre aide.

Re: [array] compter les occurences

Posté : 16 sept. 2009, 14:20
par barbapapa
Re,

J'ai trouvé une autre piste... maintenant il ne manque plus qu'a faire apparaitre le nombre de fois que chaque valeur de $result apparait dans $code_p
<?php

$statut= $_POST['statut'] ;

$liste_s = file("http://www.biloute.fr/cgi-bin/A.pl?Format=EXCEL&code=$statut");

$code_p = array();
$code_p_uniq = array();

// je recupere ici la colonne 1 de mon fichier excel
for ($i=1; $i<count($liste_s); $i++) {
        $sisi = explode("\t",rtrim($liste_s[$i]));
        $code_p[] = $sisi[1];

}

// je vais créeer un nouvel array avec des valeurs uniques
$code_p_uniq = array_unique($code_p);

$result = array_unique(array_diff_assoc($code_p, $code_p_uniq));

$nb_erreur = sizeof($result);

echo "<pre>";
echo "il y a $nb_erreur a corriger.";
echo "</pre>";

echo '<table border="1">';
echo '<tr><th>sisi</th></tr>';
for ($n=1; $n<count($result); $n++) {
        while (list ($key, $val) = each ($result)) {
        echo '<tr><td>'.$val.'</td></tr>';
        }
}

echo '</table>';
?>

Re: [array] compter les occurences

Posté : 16 sept. 2009, 15:24
par barbapapa
J'ai finalement trouvé la solution :
<?php

$statut= $_POST['statut'] ;

$liste_s = file("http://www.biloute.fr/cgi-bin/A.pl?Format=EXCEL&code=$statut");

$code_p = array();
$code_p_uniq = array();

// je recupere ici la colonne 1 de mon fichier excel
for ($i=1; $i<count($liste_s); $i++) {
        $sisi = explode("\t",rtrim($liste_s[$i]));
        $code_p[] = $sisi[1];

}

// je vais créeer un nouvel array avec des valeurs uniques
$code_p_uniq = array_unique($code_p);

$result = array_unique(array_diff_assoc($code_p, $code_p_uniq));

$nb_erreur = sizeof($result);

foreach ($code_p as $code){
        if (in_array($code, $result)){
        $var[] = $code;
        }
}

$var = array_count_values($var);

echo "<pre>";
echo "il y a $nb_erreur a corriger.";
echo "</pre>";

echo '<table border="1">';
echo '<tr><th>sisi</th><th>nb var</th></tr>';
while (list ($key, $val) = each ($var)) {
echo '<tr><td>'.$key.'</td><td>'.$val.'</td></tr>';
}


?>