0

我有一个像下面这样的数组,我想以一种特殊的方式计算值的总和,其中 val1_(.*) {正则表达式}的所有值,以及类似的其他值。我只有特定的 val,例如 val1、val2 和 val3。

我的数组是这样的:

$stats = Array
(
    [ADDED_NEW_2012_06_12] => 16
    [ADDED_OLD_2012_06_12] => 10
    [ADD_LATER_2012_06_12] => 12
    [ADDED_NEW_2012_06_11] => 16
    [ADDED_OLD_2012_06_11] => 10
    [ADD_LATER_2012_06_11] => 12
)

你能告诉我如何获得我的结果。我不知道如何在 php 中使用正则表达式添加这些值。请帮忙。

4

5 回答 5

2

如果您可以通过键的第一部分识别值,则不一定需要正则表达式。

遍历数组并创建一个新数组,每个数组都有一个元素valX

$totals = array();

// iterate over the array
foreach($array as $key => $value) {
    $k = substr($key, 0, strpos($key, '_')); // get the first part (i.e. `valX`)
    if(!isset($totals[$k])) { // if $totals['valX'] does not exist, initialize
        $totals[$k] = 0;
    }
    $totals[$k] += $value; // sum
}

参考: foreach , substr, strpos,isset

于 2012-06-12T13:24:44.050 回答
1

你是这个意思吗?

$array = array (
  'val1_2012_06_12' => 16,
  'val2_2012_06_12' => 10,
  'val3_2012_06_12' => 12,
  'val1_2012_06_11' => 16,
  'val2_2012_06_11' => 10,
  'val3_2012_06_11' => 12,
);

$sums = array();

foreach ($array as $key => $value) {
  $regex = '~(?P<prefix>val\d+)_\d{4}_\d{2}_\d{2}~';

  if (preg_match($regex, $key, $matches)) {
    $sums[$matches['prefix']] += $value;
  }
}

它会产生类似这样的东西,它将按前缀对总和进行分组:

Array
(
    [val1] => 32
    [val2] => 20
    [val3] => 24
)
于 2012-06-12T13:19:16.150 回答
0

如果您在数组中只有这种树类型的值,那么您可以使用它:

$stats = Array(
    'ADDED_NEW_2012_06_12' => 16,
    'ADDED_OLD_2012_06_12' => 10,
    'ADD_LATER_2012_06_12' => 12,
    'ADDED_NEW_2012_06_11' => 16,
    'ADDED_OLD_2012_06_11' => 10,
    'ADD_LATER_2012_06_11' => 12
);  

foreach($stats as $key => $value)
{
 $substring=substr($key, 0 , 9);
  if($substring=='ADDED_NEW')
    @$ADDED_NEW += $value;
  elseif($substring=='ADDED_OLD')
    @$ADDED_OLD += $value;
  else
    @$ADD_LATER += $value;
}
echo 'ADDED_NEW : ' . $ADDED_NEW .'<br>ADDED_OLD : ' . $ADDED_OLD .'<br>ADD_LATER : ' . $ADD_LATER ; 

输出 :

ADDED_NEW : 32
ADDED_OLD : 20
ADD_LATER : 24
于 2012-06-12T13:28:04.130 回答
0

编辑:更新为精致的问题

您可以将密钥与代码相匹配,然后使用简单的 foreach 循环从那里创建一个总和。

$array = array(
    'ADDED_NEW_2012_06_12' => 16,
    'ADDED_OLD_2012_06_12' => 10,
    'ADD_LATER_2012_06_12' => 12,
    'ADDED_NEW_2012_06_11' => 16,
    'ADDED_OLD_2012_06_11' => 10,
    'ADD_LATER_2012_06_11' => 12,
);


$sumarray = array();
foreach ($array as $key => $value)
{
   $matches = array();
   preg_match("/^(\w+?_\w+?)_/i", $key, $matches);
   $key = $matches[1];
   if (!isset($sumarray[$key]))
   {
      $sumarray[$key] = $value;
   } else {
      $sumarray[$key] = $sumarray[$key] + $value;
   }
}

print_r($sumarray);
于 2012-06-12T13:26:56.797 回答
-4

$总和 = 0; Foreach($object as $key=>$value){ $sum += $value; }

于 2012-06-12T13:19:45.177 回答