Перебираю csv файл с уникальными парами значений, нахожу искомое, но вывод происходит два раза. Чувствую, где то ошибка в цикле, но понять где именно - не могу. PHP: <?php /** * @author new_bember * @copyright 2017 */ $row=1; ini_set("auto_detect_line_endings", true); $ean = '6911234107110'; if (($handle = fopen("ean.csv", "r")) !== FALSE) { while (($data = fgetcsv($handle, 25, ';')) !== false){ $num = count($data); //echo "<p> $num полей в строке $row: <br /></p>\n"; $row++; for ($c=0; $c < $num; $c++) { // echo $data[$c] . "<br />\n"; if (is_null($data[0])){ // echo('oops'); } elseif (strcasecmp($data[1],$ean) == 0) { echo($data[0]). '<br>'; echo($data[1]). '<br>'; } } } fclose($handle); } ?>
дело в том, что они выводятся два раза, первая,вторая,первая,вторая. И что интересно, в отладчике бряк ставлю на 19 строке, а он не срабатывает и программа успешно завершается с выводом четырёх строк.
да ладно сегодня же субота не обращай внимание и не ищи сложные пути разбираясь в деталях, забей, так конечно делать ненадо, но должно сработать PHP: elseif (strcasecmp($data[1],$ean) == 0) { echo($data[0]). '<br>'; echo($data[1]). '<br>'; exit(); }
Так я, собственно, без спешки и пытаюсь разобраться КАК НАДО, хочу научиться писать качественно, потому и спрашиваю.
в дебагере поставьте точки остановы на том месте которое дублируется, если это echo -то именно там и по шагам смотрите когда они вызываются. скорее всего условие срабатывает дважды "elseif(strcasecmp($data[1],$ean)==0)", можно попытаться выполнить более строгую проверку ===, но вообще дебагер не помешает
PHP: <?php /** * @author new_bember * @copyright 2017 */ $row=1; ini_set("auto_detect_line_endings", true); $ean = '6911234107110'; if (($handle = fopen("ean.csv", "r")) !== FALSE) { while (($data = fgetcsv($handle, 30, ';')) !== false){ $num = count($data); if (strcasecmp($data[1],$ean) == 0) { echo($data[0]). '<br>'; echo($data[1]). '<br>'; } $row++; } fclose($handle); } ?> Ларчик открывался просто: лишний цикл перебора в цикле while, и кроме того неверная максимальная длина строки во входящих параметрах fgetcsv, из-за чего fgetcsv возвращал null после каждой валидной строки.