【问题标题】:PHP array: Conditional sumPHP数组:条件和
【发布时间】:2019-01-02 13:52:25
【问题描述】:

我有一个如下所示的数组:

$array = array("a1" => 0, "a2" => 2, "a3" => 1, "b1" => 2, "b2" => 3);

当只考虑第一个字符时,我想对每个“唯一”键的值求和。结果应该是:

$newarray = array("a" => 3, "b" => 5);

我曾尝试在另一个 foreach() 循环中使用 foreach() 循环,如下所示:

foreach ($xml->children() as $output) {
  foreach ($array as $key => $value) {
    if (substr($key,0,1) == $output->KEY) {
      $sum += $value; echo $sum;
    }
  }
}

它没有起作用,因为结果显然添加了先前的计算。

【问题讨论】:

    标签: php arrays calculation


    【解决方案1】:

    简单的解决方案:

    $final_array=[];
    foreach($array as $key=>$value){
         $final_array[$key[0]] =  (isset($final_array[$key[0]])) ? $final_array[$key[0]]+$value : $value;
     }
     print_r($final_array);
    

    输出:- https://3v4l.org/tZ4Ei

    【讨论】:

      【解决方案2】:

      你可以试试这个。它将从您的键中获取第一个字母,并使用该第一个字母键对所有值求和。

      <?php
      $sum = [];
      foreach ($array as $key => $value) {
          $letter = substr($key,0,1);
          if (!isset($sum[$letter])){$sum[$letter] = 0;}
          $sum[$letter] += $value;
      }
      
      var_dump($sum);
      

      【讨论】:

      • @executable OP 只需要考虑第一个字符。即使$key = 'ab'; 这将导致$letter = 'a'; 因为substr($key, 0, 1) 返回第一个字符
      • 作者只用第一个字符询问“当只考虑第一个字符时,每个“唯一”键的总和值”您还​​可以使用 ctype_alpha 验证键以检查它是字母还是数字,并通过该结果做出其他决定
      【解决方案3】:

      一个简单的isset 应该可以做到:

      $array = array("a1" => 0, "a2" => 2, "a3" => 1, "b1" => 2, "b2" => 3);
      $result = array();
      foreach ($array as $oldkey => $val) {
          $newkey = substr($oldkey, 0, 1);
          if (isset($result[$newkey]) === false)
              $result[$newkey] = $val;
          else
              $result[$newkey] += $val;
      }
      var_dump($result);
      

      【讨论】:

      • 该死 :D 几秒钟后
      • @JohnnyB1988 准确地说是两秒后。
      • @Salman 我很高兴我的代码和你的一样,这意味着我的学习进展顺利。
      【解决方案4】:

      试试这个方法

      $array = array('a1' => 0, 'a2' => 2, 'a3' => 3, 'b1' => 2, 'b2' => 3);
      $result = array();
      foreach($array as $key => $value){
          if(isset($result[$key[0]])){
              $result[$key[0]] = $result[$key[0]]+$value;
          } else {
              $result[$key[0]] = $value;
          }
      }
      print_r($result);
      

      【讨论】:

      • 您的状况中缺少)
      【解决方案5】:

      快速简单,字符后面可以有任意数量的数字。

      <?php
      
      $array = ["a1" => 0, "a2" => 2, "a3" => 1, "b1" => 2, "b2" => 3];
      $newArray = [];
      
      foreach ($array as $key => $value) {
        $key = preg_replace("/[0-9]*$/", "", $key);
        $newArray[$key] = (isset($newArray[$key])) ? $newArray[$key] + $value : $value;
      }
      
      print_r($newArray);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-21
        • 1970-01-01
        • 2021-02-12
        • 2018-01-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多