【问题标题】:Summing for values in my array对我的数组中的值求和
【发布时间】:2012-06-13 05:17:42
【问题描述】:

我有一个如下所示的数组,我想以特定方式计算所有值的总和,其中 ADDED_NEW_(.*) {正则表达式} 的所有值以及类似的其他值。 我只有特定的值,例如 ADDED_NEW、ADDED_OLD 和 ADD_LATER。

我的数组是这样的:

$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 中使用正则表达式添加这些值。请帮忙。

我期望的输出是 $ADDED_NEW = 32(即 16+16)、$ADDED_OLD = 20(即 10+10)和 $ADD_LATER = 24(即 12+12)

【问题讨论】:

  • 无法完全理解这个 => val1_(.*) {正则表达式}?这是什么意思?
  • 你想具体匹配什么文本?
  • 这个问题不够清晰。找时间解释一下场景。
  • 鉴于您问题中的$stats 数组,您能写出您期望的输出吗?

标签: php regex arrays


【解决方案1】:

我相信您只是想添加相似键的值,我假设它们都以 ADDED_NEW 或 ADDED_OLD 或 ADD_LATER 开头,这样我们就可以制作 3 个计数器,然后匹配键中的那些并添加到计数器中。

我对 PHP 了解不多,但使用手册和我的 Python 知识,这是我收集的:

<?php
$ADDED_NEW = 0;
$ADDED_OLD = 0;
$ADD_LATER = 0;
foreach ($stats as $key => $value) {
    if (preg_match("ADDED_NEW_.*", $key)) { $ADDED_NEW += $value; }
    if (preg_match("ADDED_OLD_.*", $key)) { $ADDED_OLD += $value; }
    if (preg_match("ADD_LATER_.*", $key)) { $ADD_LATER += $value; }
}
?>

【讨论】:

  • 错误显示在 ADDED_NEW = 0 上; ADDED_OLD = 0; ADD_LATER = 0;在 if 条件下也是如此
  • LOL 抱歉,忘记了 $ 符号 ;)(我确实警告过你,我不太了解 PHP XD)
  • 但它们不是可变的。它们在数组中
  • 呃,你到底想要什么......给定你的例子,你期望什么输出?
  • 其实 ADDED_NEW, ADDED_OLD 是数组中的键。我想做类似数组键的总和
【解决方案2】:

看看这个。

<?php



   $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
);
    $ADDED_NEW = 0;
    $ADDED_OLD = 0;
    $ADD_LATER = 0;
    foreach ($stats as $key => $value) {
        if (preg_match("/ADDED_NEW_.*/", $key)) { $ADDED_NEW += $value; }
        else if (preg_match("/ADDED_OLD_.*/", $key)) { $ADDED_OLD += $value; }
        else if (preg_match("/ADD_LATER_.*/", $key)) { $ADD_LATER += $value; }
    }

echo "$ADDED_NEW - $ADDED_OLD - $ADD_LATER";

?>

输出: 32 - 20 - 24

【讨论】:

    【解决方案3】:

    试试这个:

    <?php
    
    $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,
    );
    
    $accumulators = array
    (
        "ADDED_NEW" => 0,
        "ADDED_OLD" => 0,
        "ADD_LATER" => 0,
    );
    
    foreach($stats as $key => $value)
    {
        foreach(array_keys($accumulators) as $accumulator)
        {
            if(preg_match("@^${accumulator}@m", $key)){$accumulators[$accumulator] += $value;}
        }
    }
    
    header('Content-Type: text/plain');
    print_r($accumulators);
    
    ?>
    

    【讨论】:

      猜你喜欢
      • 2022-07-20
      • 2016-09-05
      • 1970-01-01
      • 2011-04-13
      • 1970-01-01
      • 2015-10-30
      • 2014-07-28
      相关资源
      最近更新 更多