Ottenere il numero di record uguali da file CSV

di il
2 risposte

Ottenere il numero di record uguali da file CSV

Salve, ho un database CSV fatto in questa maniera:

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

Con il codice sotto riporto i dati 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

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

if($arr[0] != ''){

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);
?>

2 Risposte

  • Re: Ottenere il numero di record uguali da file CSV

    Inizializzati fuori dal flusso iterativo due counter $pippo_ok e $pippo_ko.
    Basta che per ogni iterazione controlli se la tua 3a colonna sia == a OK o KO e incrementi il counter adeguato.
  • Re: Ottenere il numero di record uguali da file CSV

    Ho fatto così e fa quello che volevo. Come modifico il codice per avere il risultato in tabella in ordine decrescente?

    $fileURL = "../database/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[2] == "OK"; });

    $arrColNomi = array_column($arrElementiOK, 1);

    $arrConteggioNomi = array_count_values($arrColNomi);

    foreach ($arrConteggioNomi as $key => $value) {
    echo "<table><tr>";
    echo "<td> $key </td>";
    echo "<td> $value </td>";
    echo "</tr></table>";
    }
Devi accedere o registrarti per scrivere nel forum
2 risposte