【问题标题】:How to calculate the total values of array items如何计算数组项的总值
【发布时间】:2021-08-04 21:04:29
【问题描述】:

我正在尝试计算每个项目的第 4 部分的总数量,但 array_sum 不适用于我的代码,当我回显 $parts 时,我只得到一个数字,即 4 .. 这是我的代码:

$test = "2021/05/10,0,0,0,1|2021/05/11,0,0,0,2|2021/05/0,0,0,0,3|2021/05/13,0,0,0,4";
$test = explode("|", $test);

foreach($test as $key => $value){
    $parts = explode(",", $test[$key])[4];
}

echo array_sum($parts);

【问题讨论】:

  • 当然array_sum 不行,$parts 不是数组。你的意思是$parts[] = ...
  • 另外,如果唯一的目的是将它们相加,请在 foreach() 循环中进行 - 不需要数组。
  • 但是foreach之后变成了数组
  • 不,它是 foreach 后面的字符串 4。查看@El_Vanja 处的代码
  • @Nigel Ren 你的意思是我应该写另一个foreach 并在里面使用array_sum 吗?你能解释一下你的评论吗?谢谢

标签: php arrays explode


【解决方案1】:

您的问题是 $parts 是一个字符串并且每次迭代都会覆盖,所以将它附加到一个数组中:

$parts[] = explode(",", $test[$key])[4];

但为了好玩:

preg_match_all('/,(\d+)(\||$)/', $test, $matches);
echo array_sum($matches[1]);
  • 匹配,,然后在组1中匹配并捕获()任意数量的数字\d+,后跟|或字符串结尾$

【讨论】:

    【解决方案2】:

    dates 上使用array_map(callback, array) 数组,由| 分解。并通过, 再次爆炸它,只为每个date 获取位于位置 4 的最后一部分。

    $dates = "2021/05/10,0,0,0,1|2021/05/11,0,0,0,2|
             2021/05/0,0,0,0,3|2021/05/13,0,0,0,4";
    
    $parts = array_map(fn($part)=>explode(",", $part)[4], explode("|", $dates));
    
    echo "<pre>";
    print_r($parts);
    

    打印

    /*
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
        [3] => 4
    )
    */
    

    对于这些部分的总和:

    echo array_sum($parts); //10
    

    【讨论】:

      猜你喜欢
      • 2017-08-21
      • 1970-01-01
      • 1970-01-01
      • 2018-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多