php - 只删除一次重复值,然后对数组求和
问题描述
我想在我的数组中保留重复项,并且只在多次找到一个值时删除一次。
给定一个数组:
$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)。
解决方案
您需要记住从数组中删除的值。在下面的脚本中,如果它第一次出现,则将其保存在$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]);
}
}
}
推荐阅读
- c++ - 我修改了 BFS 以在加权无向图中找到最短路径,而不是使用 Dijkstra 的算法并且它有效
- list - 我如何从颤动的列表中打印随机任务/项目?- 而不是显示列表的内容,它只打印“任务的实例”?
- reactjs - tampermonkey/greasemonkey 脚本来填写 REACTJS 表单?
- node.js - 404 未找到 nginx/1.18.0 (Ubuntu)
- javascript - 在列表中使用带有 Post 的 href
- flutter - Flutter Page createRoute 设置属性
- r - 使用 zipcodeR 包的两个邮政编码之间的距离不起作用
- scala - NoClassDefFoundError: scala/collection/StringOps
- matlab - matlab如何改变轴的功率?
- c++ - C++ 二维数组拼图