Задать вопрос
BeingZepp
@BeingZepp
Лучший друг добрых хоббитов

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

Прохожу тестовое задание курса с ютюба. Понятно, можно следующее видео посмотреть, где решение от преподавателя, но я хочу сделать это сам + гугл + разочек помощь Хабра, то есть, условия, приближенные к полевым.
Есть csv файл (изобр. прилагаю), который я конвертировал в массив (изобр. прилагаю), где нужно получит сумму, ну, типа расходов/доходов. Цифры этих р/д в файле изначально текстовые, я вроде их почистил и перевёл в дробные, а дальше не могу додуматься, что делать, всё перепробовал, хотел сделать из этого новый массив, чтобы попробовать array_sum, получился список разных массивов в одной переменной (изобр. прилагаю), если не делаю массив, получается список дробных (вроде) в одной переменной (изобр. прилагаю). Подскажите, пожалуйста, как получить сумму этих цифр?
В последней картинке вар_дамп получившейся переменной без попытки сделать из неё массив, то есть, список дробных.
P. S. Убрал изображения, чтобы не нарушать правила.
Вот текст csv файла:
Date,Check,Description,Amount
01/04/2021,7777,Transaction 1,"$150.43"
01/05/2021,,Transaction 2,"$700.25"
01/06/2021,,Transaction 3,"-$1,303.97"
01/07/2021,,Transaction 4,"$46.78"
01/08/2021,,Transaction 5,"$816.87"
01/11/2021,1934,Transaction 6,"-$1,002.53"
01/12/2021,7307,Transaction 7,"$532.22"
01/13/2021,1352,Transaction 8,"-$704.59"
01/14/2021,,Transaction 9,"$98.04"
01/15/2021,,Transaction 10,"-$204.56"
01/25/2021,,Transaction 11,"$1,056.27"
01/26/2021,,Transaction 12,"$550.10"
01/27/2021,,Transaction 13,"-$825.77"
01/28/2021,4250,Transaction 14,"$212.68"
01/29/2021,,Transaction 15,"$195.68"
02/02/2021,9915,Transaction 16,"-$463.75"
02/03/2021,,Transaction 17,"$78.02"
02/04/2021,,Transaction 18,"$268.81"
02/05/2021,,Transaction 19,"$1,360.55"
02/08/2021,,Transaction 20,"-$594.46"
02/09/2021,9125,Transaction 21,"$467.39"
02/10/2021,,Transaction 22,"$39.49"
02/11/2021,7929,Transaction 23,"-$81.87"
02/12/2021,,Transaction 24,"$255.64"
02/12/2021,,Transaction 25,"$13.51"

Вот код:
$sample_1_csv = array();
$lines = file('D:\php\xampp\htdocs\zeppus\transaction_files\sample_1.csv', FILE_IGNORE_NEW_LINES);

foreach ($lines as $key => $value)
{
    $sample_1_csv[$key] = str_getcsv($value);
}

$sample_1_csv = array_map(function($sample) {
    return array(
        'date' => $sample['0'],
        'check' => $sample['1'],
        'description' => $sample['2'],
        'amount' => $sample['3'],
    );
}, $sample_1_csv);

echo '<pre>';
print_r($sample_1_csv);
echo '</pre>';

foreach ($sample_1_csv as $amInc)
{
    $amInc = [(float) str_replace(['$', ',', 'Amount'], '', $amInc['amount'])];
    
    echo '<pre>';
    print_r($amInc);
    echo '<pre>';
}

Вот что что получилось, после превращения csv в массив:
spoiler

Array
(
    [0] => Array
        (
            [date] => Date
            [check] => Check
            [description] => Description
            [amount] => Amount
        )

    [1] => Array
        (
            [date] => 01/04/2021
            [check] => 7777
            [description] => Transaction 1
            [amount] => $150.43
        )

    [2] => Array
        (
            [date] => 01/05/2021
            [check] => 
            [description] => Transaction 2
            [amount] => $700.25
        )

    [3] => Array
        (
            [date] => 01/06/2021
            [check] => 
            [description] => Transaction 3
            [amount] => -$1,303.97
        )

И так далее.

Вот, что получается после чистки [amount] от $ и запятой + перевода в дробные:
spoiler

Array
(
    [0] => 0
)
Array
(
    [0] => 150.43
)
Array
(
    [0] => 700.25
)
Array
(
    [0] => -1303.97
)
Array
(
    [0] => 46.78
)
Array
(
    [0] => 816.87
)
Array
(
    [0] => -1002.53

И так далее.
  • Вопрос задан
  • 78 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
Adamos
@Adamos
Если вам нужны только суммы транзакций, зачем в массиве остальные поля?
Соберите отдельный массив, каждое значение которого - сумма транзакции, тогда к нему действительно можно будет применять array_sum.
Кроме того, строка "-$1,002.53" - это не число, и приведена к числу она быть не может. Нужно удалить из строки символы доллара и запятой.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы