$linesToSkip = [0,1,255];
foreach ($rows as $i => $row) {
if (!in_array($i, $linesToSkip)) {
// afficher la ligne...
}
}Et tu l'as rempli comment cette variable ? m'enfin je t'ai quand même donné une solution au dessus.Je les ai mis dans une variable qui a cette forme $ligne_a_supprimmer = 5-9-8-25-63;
$linesToSkip = [0,1,255];
$linesToSkip = array_combine($linesToSkip, $linesToSkip);
foreach ($rows as $i => $row) {
if (!isset($linesToSkip[$i])) {}
}if ($row != 0 && !in_array($row, $linesToSkip)) {
//...
}
$linesToSkip[] = 0;
et te contenter de faire le
if (!in_array($row, $linesToSkip)) {
//...
}
stef, pourquoi le code ci-dessus, qui évite de faire 2 boucles quand une seule suffit, n'est pas possible ?Bah dans ce cas pour chaque ligne tu vérifies si ce qui doit être rempli l'est et tu n'affiches la ligne que si c'est le cas.
foreach ($rows as $row) { if (/* colx non vide && coly non vide && ... */) { // afficher la ligne... } }
<?php
/* open the file */
if (($handle = fopen('test.csv', 'rb')) === false) {
echo 'error while opening the file';
exit;
}
$length = 1024;// 1 ko, increase if lines longer
$separator = ';';// adapt to csv format
$enclosure = '"';// adapt to csv format
/* skip the first line (header) */
fgetcsv($handle, $length, $separator, $enclosure);
/* loop over the rest of the file */
while (($data = fgetcsv($handle, $length, $separator, $enclosure)) !== false) {
/* skip the line if not valid */
if (validateLine($data) === false) {
continue;
}
/* do something with $data */
echo implode(';', $data) . '<br/>';
}
/* close the file */
fclose($handle);
/* function to validate the line */
function validateLine($data): bool
{
/* let's say we keep the line if at least 80% of the columns are filled */
$successRate = 0.8;// 0 to 1 for 0% to 100%
$colsNumber = count($data);
$colsFilled = 0;
foreach ($data as $value) {
if (!empty($value)) {
++$colsFilled;
}
}
return $colsFilled / $colsNumber >= $successRate;
}