首页 > 解决方案 > 只删除一次重复值,然后对数组求和

问题描述

我想在我的数组中保留重复项,并且只在多次找到一个值时删除一次。

给定一个数组:

$array = ['+5', '+5', '+3', '+3', '+3', '+3', '+5', '+5'];

+5并且+3每个出现四次。我想只删除一个+5值和一个+3值,然后找到剩余值的总和。

$duplicate = ['+5', '+3'];
$array = ['+5', '+5', '+3', '+3', '+3', '+3', '+5', '+5'];

$i = 0;
foreach ($duplicate as $dup) {
    if (strpos($duplicate[$i], '+') !== false) {
        $duplicate[$i] = preg_replace('/[^0-9,:]/', '', $duplicate[$i]);
        $duplicate[$i] = "-$duplicate[$i]";
    }
    $i++;
}
$sum = array_merge($duplicate, $array);
$end_value = array_sum(array_values($sum));
var_export($end_value);

对于我的输入,最终总和应该是24(15 + 9)。

标签: phparrayssumduplicatesfiltering

解决方案


您需要记住从数组中删除的值。在下面的脚本中,如果它第一次出现,则将其保存在$existsValues数组中。如果您再次找到相同的值,则将其删除(并将您所做的信息保存在$deletedValues数组中)。如果两个数组中都存在值,那么你什么也不做。这样,您总是删除第二次出现的值,仅此而已。

$existsValues = [];
$deletedValues = [];
foreach ($add_array as $key => $value) {
    if (!in_array($value, $existsValues)) {
        $existsValues[] = $value;
    } else {
        if (!in_array($value, $deletedValues)) {
            $deletedValues[] = $value;
            unset($add_array[$key]);
        }
    }
}

推荐阅读