【问题标题】:How do I get sum of all figures inside a string but for the whole column?如何获取字符串中所有数字的总和,但对于整列?
【发布时间】:2019-03-12 17:00:02
【问题描述】:

数据:

  • MEL1INFA73 已确认。 2018 年 5 月 21 日凌晨 3:29 发送给 Safaricom 帐户 Tunukiwa 的 Ksh29.00 新 M-PESA 余额为 Ksh5.50。交易成本,Ksh0.00。
  • MEE6ESSVCS 已确认。 Ksh2,240.00 支付给 Naivas West End Plaza。 2018 年 14 月 5 日晚上 8:13。新的 M-PESA 余额为 Ksh4,753.50。交易成本,Ksh0.00。
  • MEF1EZ0MNR 已确认。您已于 2018 年 15 月 5 日上午 9:36 从 Barclays Bank K LTD 303031 收到 Ksh10,000.00 新的 M-PESA 余额为 Ksh14,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("/ksh\s*(\d+\.\d+)/i", $str, $matches);
                                echo array_sum($matches[1]); ?></td>
                            </tr>
                    <?php $_count ++; }
                    ?>
            <?php }else{

                }
            ?></td>

【问题讨论】:

  • 你有没有想过将array_sum($matches[1])的结果汇总一下?
  • 请问这是怎么做的?
  • 您想要所有三个消息的数字的总结果吗?
  • 是的,消息存储在不同的行中

标签: php mysql arrays


【解决方案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("/ksh\s*(\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("/ksh\s*(\d+\.\d+)/i", str_replace(",","",$AllItems), $matches);
    $total = array_sum($matches[1]);
    

    示例:
    https://3v4l.org/Pk7YT

    Edit 注意到有逗号作为千位分隔符。需要删除正则表达式和求和才能与 str_replace 一起使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-07
      • 1970-01-01
      • 1970-01-01
      • 2015-06-01
      相关资源
      最近更新 更多