Как получить сумму определенных значений индекса Array

Я читаю данные из файла и отображаю массив, как показано ниже:

  if (($fp = fopen("test.txt", "r")) !== FALSE) {       
    $count = 0;
    while(($row = fgetcsv($fp)) !== FALSE)
    {


        $row = explode("|",$row[0]);
        foreach($row as &$el)
        {
            $el=trim($el);

        }
        $count++;
                $tot = array_sum(array_column($row,2));
        echo "<pre>";print_r($row); 
                if($count>3)
        {
            break;  
        }
      echo "Coumt :".$tot;  
    }

          echo "Coumt :".$tot;
    fclose($fp);
}

Данные файла test.txt:

005-4410040             |BIRM|      0 
005-4410040             |CHI |  
450 005-4410040         |CIN |    144

Я хочу, чтобы общая сумма 2-го индекса массива это означает 320 + 450 + 144 в отдельном варианте.

Как я могу достичь этого? Уже пробовал array_column, но он не работает.

Обновление Что я пробовал:

$sum = array_sum(array_column($row,$row['2']));

2 ответа

Решение

Вы должны быть в состоянии достичь этого с помощью array_column() а также array_sum() как это

$row = [
        ['005-4410040','BIRM',1],
        ['005-4410040','CHI',2],
        ['005-4410040','CIN',3]
    ];

$tot = array_sum(array_column($row, 2));

РЕЗУЛЬТАТ

6

После того, как код добавлен в вопрос:

Ты не понимаешь fgetcsv() правильно, он получает по одной строке за раз. Таким образом, каждый вызов fgetcsv возвращает одну строку из файла, который вы взорвали в $row

Все, что вам нужно сделать, это накопить $row[2] как вы обрабатываете над строками файла.

if (($fp = fopen("test.txt", "r")) !== FALSE) {       
    $count = 0;
    $tot = 0;

    while(($row = fgetcsv($fp)) !== FALSE)
    {
        $row = explode("|",$row[0]);
        $count++;
        // I see one line with no value so to be safe
        $tot += $row[2] != '' ? $row[2] : 0;

        if($count>3) {
            break;  
        }
        echo "Coumt : $tot";  
    }

    echo "Coumt : $tot";
    fclose($fp);
}

Вы вызываете неправильную последовательность

$arr=array(array
(
     0  => "005-4410040",
     1  => "BIRM",
     2  => 320
),
array
(
     0  => "005-4410040",
     1  => "CHI",
     2  => 450
),
array
(
     0  => "005-4410040",
     1  => "CIN",
     2  => 144
));
echo (array_sum(array_column($arr, 2)));
Другие вопросы по тегам