0

以下のような配列があり、val1_(.*) {正規表現} のすべての値、および同様に他の値を特定の方法で合計したいと考えています。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

キーの最初の部分で値を識別できる場合は、必ずしも正規表現は必要ありません。

配列を繰り返し処理し、それぞれに1つの要素を持つ新しい配列を作成します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_strposisset

于 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

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

于 2012-06-12T13:19:45.177 に答える