@dj_vadim

Подсчёт уникаьных в многомерном массиве?

Есть файл со строками типа:
Инфо1;12
Инфо2;18
Инфо1;3
Инфо3;27
Инфо1;11
Инфо2;19
Нужно убрать повторения и сложить числа, чтобы в итоге было так:
Инфо1;26
Инфо2;37
Инфо3;27

Пытаюсь реализовать следующим образом:
<? error_reporting(E_ALL);
# Путь к файлу
$file_name2 = "files/invites.txt";
 
# Считываем информацию по строкам
$data = file( $file_name2 );

# Количество элементов массива $data
$count_data = count($data);

for($i=0; $i<$count_data; $i++):
    $data[$i] = explode(";",$data[$i]); // парсим строку в массив
endfor;

for($i=0; $i<$count_data; $i++):
    for($j=$i+1; $j<($count_data); $j++): // начинать поиск со следующей строки от текущего $i
        if($data[$i][0]===$data[$j][0]){ // если равно
            $data[$i][1] = $data[$i][1] + $data[$j][1]; // суммируем в этот же массив в $i ячейку
            unset($data[$j]); // вторую ячейку удаляем т.к. это повтор
        }
    endfor;
endfor;

echo "<pre>";print_r($data);echo "</pre>";
?>

Это всё выводит только самую первую строку с суммой, а остальные все удалены.
Подскажите что я делаю не так и как получить желаемый результат?
  • Вопрос задан
  • 93 просмотра
Решения вопроса 1
ZLOFENIX
@ZLOFENIX
Абсолютно поехавший
$data = file( $file_name2 );
$z = array();
foreach($data as &$v)
{
$t = explode(';', $v);
$z[$t[0]] += (int)$t[1];
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
$rows = explode("\n", file_get_contents('files/invites.txt'));

$result = [];
foreach ($rows as $row) {
    $rowData = explode(';', trim($row));
    if (isset($result[$rowData[0]])) {
        $result[$rowData[0]] += $rowData[1];
    } else {
        $result[$rowData[0]] = $rowData[1];
    }
}

var_export($result);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы