Как определить максимальное количество полей в строке, перебрав тысячи строк?

Необходимо определить максимальное количество полей в строке, проблема в том, что строк может быть сотни тысяч.

Пример:

поле, поле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
→ Ссылка