Как определить максимальное количество полей в строке, перебрав тысячи строк?
Необходимо определить максимальное количество полей в строке, проблема в том, что строк может быть сотни тысяч.
Пример:
поле, поле2, поле 3
поле, поле2, поле 3
поле, поле2, поле 3, поле4, поле5
поле, поле2, поле 3
поле, поле2
Как получить число 5?
function multiexplode ($delimiters, $string) {
$ready = str_replace($delimiters, $delimiters[0], $string);
$launch = explode($delimiters[0], $ready);
return $launch;
}
$fp = @fopen("uploads/$name", "r");
if ($fp) {
while (($text = fgetcsv($fp, 4096)) !== false) {
$i++;
$text = str_replace('"', '', $text);
$exploded = multiexplode (array(",", ";", "|"), $text);
///
}
Как дальше не знаю, помогите, пожалуйста.
Ответы (1 шт):
Автор решения: Borislav
→ Ссылка
Полностью рабочий код для всех разделителей, но без парсинга самого csv.
<?php
$fieldCounter = 0;
foreach ([
'поле, поле2, поле 3',
'поле, поле2, поле 3, поле 3',
'поле, поле2, поле 3, поле 3, поле 3',
'поле, поле2, поле 3, поле 3, поле 3, поле 3, поле 3',
'поле; поле2; поле 3; поле 3; поле 3; поле 3; поле 3; поле 3',
'поле| поле2| поле 3| поле 3| поле 3| поле 3| поле 3| поле 3| поле 3',
'поле, поле2, поле 3, поле 3, поле 3',
'поле, поле2, поле 3, поле 3',
'поле, поле2, поле 3',
] as $line) {
$tmpCounter = (
substr_count($line, ',')
?: substr_count($line, ';')
?: substr_count($line, '|')
) + 1;
if ($fieldCounter < $tmpCounter) {
$fieldCounter = $tmpCounter;
}
}
var_dump($fieldCounter); // 9