contare record uguali in file csv

lucasky

Nuovo Utente
11 Mar 2020
3
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.449
338
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
3
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

Moderatore
Membro dello Staff
MOD
28 Nov 2014
432
73
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 :)
 

lucasky

Nuovo Utente
11 Mar 2020
3
0
1
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 :)

Grazie, effettivamente la prima parte fa al caso mio perché restituisce il numero di volte in ok. La seconda parte, nella tabella non capisco bene perché appaiono più volte gli stessi nomi con conteggi non reali. Comunque mi basterebbe la prima parte fino a <hr> aggiungendo di poter visualizzare non solo il record 0 ma anche il resto della riga e possibilmente in ordine decrescente.

Esempio: file CSV fatto in questo modo:

Nome,Cognome,23-03-2019,08:38,OK,
ecc...

Il risultato dovrebbe stare in una tabella così:
Nome Cognome 1volta
ecc...
tutto il ordine decrescente.

Grazie in anticipo
 
Ultima modifica:
Discussioni simili
Autore Titolo Forum Risposte Data
C Contare numero record uguali Database 3
nim contare record uguali in tabella PHP 10
G [ACCESS2007]: contare li ultimi record con lo stesso valore in un campo, finchè il valore non cambia MS Access 2
zorro [PHP] Contare i record di una tabella PHP 6
M contare record db con valore specifico PHP 1
anthares Contare record in tabella secondo certe condizioni PHP 21
M Contare totale risultati tabella in un periodo di tempo PHP 5
A Contare gli elementi di un array PHP 13
maxnegri Contare sessioni aperte e creare condizione PHP 1
B [MySQL] contare quante un oggetto e' presente MySQL 2
elpirata [RISOLTO][Mysql] Contare le occorrenze in un campo tipo varchar MySQL 2
P [PHP] Contare quante volte uno stesso id si ripete nella tabella PHP 12
P [PHP] Contare i mesi con timestamp. PHP 8
A Contare n° totale oggetti da mysql PHP 5
asevenx [Javascript] [AngularJS] contare opzioni selezionate di una select in un elenco ng-repeat Javascript 0
xone [PHP] Contare numero dei giorni tra data_in e data_out PHP 11
F Contare le righe con php ad oggetti MySQL 0
asevenx Contare numero di righe in un form dinamico Javascript 5
F Miglior metodo per contare le righe di una query MySQL 2
S Contare valori uguali in una colonna PHP 2
N Contare post MySQL 2
L contare nodi figli di un determinato nodo madre XML 0
H Contare file presenti nella pagina PHP 3
S [RISOLTO]php contare numero delle query PHP 1
L Contare determinati valori che si ripetono in una tabella per un detemrinato ID MySQL 2
Monital Contare il numero di righe con php5 PHP 10
Shyson Contare i caratteri user e dominio Javascript 57
D Contare numero div con una determinata classe Javascript 2
criric Contare le settimane di un mese Snippet PHP 3
Monital Contare valori uguali di un array e dividerli in una stringa PHP 12
nim contare frasi che si ripetono PHP 10
R Contare il numero di click su un link PHP 2
A contare iniziali dei nomi Java 3
G contare e sommare dopo JOIN Database 8
M non contare gli accessi dal tuo pc Supporto Mr.Webmaster 1
S Come contare i Download file .zip su html HTML e CSS 10
F access ricerca record con apostrofo. MS Access 0
T come ordinare dei record recuperati da due tabelle MySQL 0
T vista record tabellare MySQL 0
K form Inserimento record mysql PHP 2
R query DELETE non cancella i record PHP 1
M Accodare record presi da un altra tabella PHP 8
MarcoGrazia Trovare record nel database partendo da id non sequenziali PHP 6
G notifiche dekstop/mobile ogni volta che record è inserito/eliminato/aggiornato PHP 0
P Pagina modifica record che non funziona PHP 0
S Selezionare ultimo record di una sotto query MySQL 27
A Tabella con bottoni per aggiornamento record PHP 6
S Differenza date record successivi MS Access 7
R Aggiornare record mysql con Ajax, jQuery e php Ajax 2
S Aggiornamento lista record Database 2

Discussioni simili