Почему не считаются повторения в программе
$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>';
}