contare record uguali in file csv

lucasky

Nuovo Utente
11 Mar 2020
2
0
1
Salve, ho un piccolo database CSV fatto in questa maniera:

Pippo,data,ora,OK,
Pluto,data,ora,OK,
Pluto,data,ora,OK,
Pippo,data,ora,KO,
Pippo,data,ora,OK,
Pippo,data,ora,OK,
Pluto,data,ora,KO,
ecc....

Con il codice sotto riporto i dati OK in una tabella secondo ordine inserimento.
La mia domanda è: come faccio ad ottenere quante volte compare Pippo in ok, quante volte Pluto in ok?
Vorrei ottenere una cosa del genere:

Pippo = 3 volte
Pluto = 2 volte
ecc...
PHP:
<?php

$fd= fopen ('il_mio_file.csv', "r");
while (!feof ($fd))
{
$riga=fgets($fd, 4096);
if ($riga != ' ')
{
$arr=split(',', $riga);

if ($arr[3] == ''OK"){

echo 'table>';
echo '<tr>';
echo '<td>' . $arr[0] . '</td>';
echo '<td>' . $arr[1] . '</td>';
echo '<td>' . $arr[2] . '</td>';
echo '</tr>';
echo '</table>';
}
}
}

fclose($fd);
?>
 
Ultima modifica di un moderatore:

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.181
312
83
@lucasky

Da regolamento del forum, come tutti noi sei tenuto ad usare il tag [ html].........[/html] senza spazio quando posti del codice html o il tag appropriato per altro codice, oppure la funzione codice dalla barra degli strumenti

box inserisci.png


Inoltre IMPORTANTE: Prima di creare una nuova discussione o di rispondere alle discussioni esistenti sei tenuto e ricordati di leggere attentamente il Regolamento del Forum e l'eventuale regolamento specifico della sezione!
Grazie
Per questa volta te lo sistemo io ma mi raccomando per il futuro
 

lucasky

Nuovo Utente
11 Mar 2020
2
0
1
@lucasky

Da regolamento del forum, come tutti noi sei tenuto ad usare il tag [ html].........[/html] senza spazio quando posti del codice html o il tag appropriato per altro codice, oppure la funzione codice dalla barra degli strumenti

box inserisci.png


Inoltre IMPORTANTE: Prima di creare una nuova discussione o di rispondere alle discussioni esistenti sei tenuto e ricordati di leggere attentamente il Regolamento del Forum e l'eventuale regolamento specifico della sezione!
Grazie
Per questa volta te lo sistemo io ma mi raccomando per il futuro
Ok grazie
 

WmbertSea

Utente Attivo
28 Nov 2014
178
27
28
Ciao, tu stai eseguendo il parsing direttamente dalla risorsa aperta ma forse converrebbe riversare inizialmente in un array tutti i dati recuperati, così da poterli manipolare più facilmente per le eventuali operazioni che vuoi andare a fare.

Una volta che i dati sono in un array multidimensionale puoi eseguire intanto un filtro, con array_filter, per avere un array dei soli elementi "OK", quindi puoi ottenere, con array_column, un array degli elementi della sola prima colonna (quella dei nomi) e, a quel punto, con array_count_values puoi ottenere il conteggio dei singoli nomi.

Qui un esempio rielaborato partendo dalle tue indicazioni:
PHP:
<?php
$fileURL = "il_mio_file.csv";

$arr = array_map("str_getcsv", file($fileURL, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES));

$arrElementiOK = array_filter($arr, function($el){ return $el[3] == "OK"; });

$arrColNomi = array_column($arrElementiOK, 0);

$arrConteggioNomi = array_count_values($arrColNomi);

foreach ($arrConteggioNomi as $key => $value) {
    echo "$key = $value volte<br>";
}

echo "<hr>";

echo "<table>";
foreach ($arrElementiOK as $el) {
    echo "<tr>";
    echo "<td>$el[0]</td>";
    echo "<td>$el[1]</td>";
    echo "<td>$el[2]</td>";
    echo "</tr>";
}
echo "</table>";
?>
Vedi se può esserti utile, fai sapere :)