Laravel суммировать и разделить отрицательное и положительное значение - PullRequest
0 голосов
/ 12 июля 2020
id | member_id | amount
========================
1  | 5   | -1000
2  | 3   | 400
3  | 2   | -102
4  | 1   | 220
5  | 10  | -10

Мой код

$getalltotal = MemberInfo::select('amount')
                            ->get()
                            ->toArray();

        foreach ($getalltotal as $key => $value) {
            $negative = 0;
            $positive = 0;
            
            if (strpos($value['amount'], '-') !== false) {
                $negative += $value['amount'];
            } else {
                $positive += $value['amount'];
            }
            
            $total = $positive + $negative;
            $dataa[] = array(
                'positive' => $positive,
                'negative' => $negative,
                'total'    => $total,
            );
           
        }

Я хочу l oop все данные и подсчет, чтобы получить в общей сложности положительные и отрицательные суммы, но я не могу возьми. Приведенный выше мой код возвращает мне 5 строк. С этим может помочь любой: (?

Final Data

$positive: 620
$negative: -1112
$total: 492

1 Ответ

1 голос
/ 12 июля 2020

Вы не должны помещать код инициализации и окончательные итоговые вычисления в l oop:

$negative = 0;
$positive = 0;

foreach ($getalltotal as $key => $value) {
    $amount = $value['amount'];

    if ($amount < 0) {
        $negative += $amount;
    } else {
        $positive += $amount;
    }
}

$total = $positive + $negative;
$data = array(
    'positive' => $positive,
    'negative' => $negative,
    'total'    => $total,
);

Поступая так же, как вы, $negative и $positive постоянно сбрасывались на 0, и последний массив был массивом массивов, потому что вы добавили квадратные скобки $data[] = ....

Также бесполезно (и непродуктивно) использовать строковую функцию, например strpos(), в вашем случае: вы работаете с числа, поэтому вы можете использовать числовые операторы (в данном случае оператор сравнения <).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...