Как получить сумму определенных значений индекса 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)));