php - PHP多维数组 - 删除部分重复并加起来
问题描述
我有一个像这样的多维数组:
array(4) {
[0] => array(2) {
[0] => string(15)
"One"
[1] => string(5)
"11:31"
}
[1] => array(2) {
[0] => string(4)
"Two"
[1] => string(5)
"11:31"
}
[2] => array(2) {
[0] => string(15)
"Three"
[1] => string(5)
"11:31"
}
[3] => array(2) {
[0] => string(4)
"One"
[1] => string(5)
"11:31"
}
}
我正在尝试删除第一个值但加在一起的值。所以它最终会像这样:
array(3) {
[0] => array(2) {
[0] => string(15)
"One"
[1] => string(5)
"22:62"
}
[1] => array(2) {
[0] => string(4)
"Two"
[1] => string(5)
"11:31"
}
[2] => array(2) {
[0] => string(15)
"Three"
[1] => string(5)
"11:31"
}
}
请注意,最后一个“一”已被删除,数组中的第二个值已从两个 11:31 到 22:62 相加。我希望这是有道理的。
有什么东西或一个特定的功能我应该看看把我推向正确的方向吗?非常感谢任何帮助。
这不仅仅是从我所知道的内容中直接删除重复项,因为尽管第二个值在此示例中,但没有一个是完全相同的,它们不会出现在实时数据中。
解决方案
您可以使用 key 创建一个循环并将元素分组到一个新数组中[0]
。如果新数组中不存在密钥,只需添加新数组即可。否则,您可以解析现有值以添加新值:
$array = [
["One", "11:31"],
["Two", "11:31"],
["Three", "11:31"],
["One", "11:31"],
];
$out = [];
foreach ($array as $item) {
// if $item[0] is not an existing key,
if (!isset($out[$item[0]])) {
// add $item as-is
$out[$item[0]] = $item;
} else {
// parse current time
list($h1, $m1) = explode(':', $item[1]);
$m1 += $h1 * 60;
// parse existing time
list($h2, $m2) = explode(':', $out[$item[0]][1]);
$m1 += $m2 + $h2 * 60;
// compute new time
$h = floor($m1 / 60);
$out[$item[0]][1] = sprintf("%02d:%02d", $h, $m1-$h*60);
}
}
// array_values removes 'named' keys.
print_r(array_values($out));
输出(浓缩):
Array
(
[0] => Array ([0] => One [1] => 23:02)
[1] => Array ([0] => Two [1] => 11:31)
[2] => Array ([0] => Three [1] => 11:31)
)
推荐阅读
- c# - 根据房间面积创建网格状结构
- zlib - Zstd/Zlib 压缩是双射的吗?
- react-native - Devtools 无法连接到反应本机模拟器
- c++ - 英特尔引脚:与默认工具一起使用时,两次检测“malloc”
- java - 为什么在这个问题中 4-pass 解决方案的性能比 1-pass 解决方案更快?
- django - DRF - 如何从序列化器数组创建 ListSerializer
- docker - wso2am 镜像 root 密码是什么?
- python - 如何将模板脚本中的变量值发送到 django 中的 url?
- java - Cloud Firestore - 带有日期类型字段的查询
- c# - 在列表中添加多个值