J'ai un fichier .csv avec 4 colonnes. Quel est le moyen le plus simple de supprimer une ligne identique à l'ID de la première colonne? Voici où j'ai été coincé: Malheureusement, des bases de données n'étaient pas un choix. P> p>
4 Réponses :
$id = $_GET['id']; if($id) { $file_handle = fopen("testimonials.csv", "w+"); $myCsv = array(); while (!feof($file_handle) ) { $line_of_text = fgetcsv($file_handle, 1024); if ($id != $line_of_text[0]) { fputcsv($file_handle, $line_of_text); } } fclose($file_handle); }
Vous oubliez la partie où vous écrivez la matrice CSV à un autre fichier. Vous ne voulez pas non plus stocker tout le CSV dans un tableau car cela pourrait entraîner des erreurs de mémoire. Mieux vaut écrire de manière progressive le CSV.
Vous pouvez faire:
$new = ''; while (!feof($file_handle)) { $line_of_text = fgetcsv($file_handle, 1024); if ($id != $line_of_text[0]) { $new .= implode(',',$line_of_text) . PHP_EOL; } }
J'ai récemment fait une chose similaire pour une newsletter désassonnée, voici mon code: Ceci utilise la méthode du fichier temporaire d'écriture de la ligne CSV par ligne pour éviter les erreurs de mémoire. Ensuite, une fois que le nouveau fichier créé, il supprime l'original et renomme le fichier Temp. P> Vous pouvez modifier ce code afin qu'il recherche un identifiant au lieu d'une adresse électronique, par exemple: P> < Pré> xxx pré> p>
$table = fopen('table.csv','r'); $temp_table = fopen('table_temp.csv','w'); $id = 'something' // the name of the column you're looking for while (($data = fgetcsv($table, 1000)) !== FALSE){ if(reset($data) == $id){ // this is if you need the first column in a row continue; } fputcsv($temp_table,$data); } fclose($table); fclose($temp_table); rename('table_temp.csv','table.csv');