Как мне получить сумму всех цифр внутри строки, но для всего столбца?

#php #mysql #arrays

#php #mysql #массивы

Вопрос:

Данные:

  • MEL1INFA73 подтверждено. Ksh29.00, отправленные в Safaricom предложения для учетной записи Tunukiwa 21/5/18 в 3:29 утра, Новый баланс M-PESA равен Ksh5.50. Стоимость транзакции, Ksh0.00.
  • MEE6ESSVCS подтверждено. 2 240.00 шиллингов, выплаченных Naivas West End Plaza. 5.04.18 14: 13.Новый баланс M-PESA составляет 4 753.50 шиллингов. Стоимость транзакции, Ksh0.00.
  • MEF1EZ0MNR подтверждено.15/5/18 в 9:36 утра вы получили 10 000,00 КШ от Barclays Bank K LTD 303031. Новый баланс M-PESA составляет 14 775,50 Кш. Покупайте товары с помощью M-PESA.

Следующий код генерирует сумму цифр в каждой строке, отличной от всего столбца:

  <?php 
                if(count($json_data["data"]) > 0){ ?>
                    <?php $_count = 1;
                        foreach($json_data["data"] as $row){ ?>
                            <tr>
                                <td><?php 
                                $str =$row["msg_body"];
                                preg_match_all("/kshs*(d .d )/i", $str, $matches);
                                echo array_sum($matches[1]); ?></td>
                            </tr>
                    <?php $_count   ; }
                    ?>
            <?php }else{

                }
            ?></td>
  

Комментарии:

1. Вы думали о том, чтобы иметь итоговый результат array_sum($matches[1]) ?

2. как это сделать, пожалуйста?

3. Вам нужны итоговые результаты цифр для всех трех сообщений?

4. да, сообщения хранятся в разных строках

Ответ №1:

Если я правильно понимаю, вам просто нужно сохранить всю сумму, а затем распечатать ее где-нибудь. Что-то вроде:

 <?php 
                if(count($json_data["data"]) > 0){ ?>
                    <?php $_count = 1;
                          $totalSum = 0;
                        foreach($json_data["data"] as $row) { ?>
                            <tr>
                                <td><?php 
                                $str =$row["msg_body"];
                                preg_match_all("/kshs*(d .d )/i", $str, $matches);
                                $rowSum = array_sum($matches[1]);
                                $totalSum  = $rowSum;
                                echo  $rowSum;?></td>
                            </tr>
                    <?php $_count   ; }
                    ?>
                    <tr><td>Total sum: <?php echo $totalSum; ?></td></tr>
            <?php }else{

                }
            ?></td>
  

Вы можете настроить свой html, конечно.

Ответ №2:

Поскольку мы имеем дело с массивом и preg_match_all, то я полагаю, что вы могли бы разбить массив и выполнить один preg_match_all вместо его зацикливания.

 $AllItems = implode(" ", $json_data["data"]);
preg_match_all("/kshs*(d .d )/i", str_replace(",","",$AllItems), $matches);
$total = array_sum($matches[1]);
  

Пример:
https://3v4l.org/Pk7YT

Редактировать заметил, что в качестве разделителей тысяч были запятые. Это необходимо удалить для регулярного выражения и суммирования для работы с str_replace.