Почему не считаются повторения в программе

$fileArr =  file('addresses.txt');

foreach ($fileArr as $line) {
    $line = trim($line);
    print '<span>' . $line  . ' - '  . repeatFinder($line, $fileArr, 'count') . '</span><br>';
}

function repeatFinder ($value = null, $arr, $mod)
{
    $counter = 1;

    foreach ($arr as $lineValue) {
        if ($lineValue == $value) {
            $counter++;
        }
        if ($lineValue == end($arr)){
                return $counter;
        }
    }
}

В addresses.txt содержаться емайлы, есть и повторяющие. Не могу понять в чем проблема и почему не считает повторения.

[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]

Ответы (1 шт):

Автор решения: Kirill

В файле addresses.txt мылы записаны в колонку (судя по вопросу). У каждой строчки в этом файте есть перевода строки. У последней строчки, скорее всего, его нет. По этой причине последние мылы не складываются - они разные (у предпоследнего есть перенос строки, у последнего нет)

Для этого случая у file() есть флаг - FILE_IGNORE_NEW_LINES

А для вашей задачи в php уже есть функция - array_count_values

$fileArr = file('addresses.txt', FILE_IGNORE_NEW_LINES);
$adresses = array_count_values($fileArr);

foreach ($adresses as $address => $repeat) {
    echo '<span>' . $address . ' - ' . $repeat . '</span><br>';
}
→ Ссылка