我想在PHP中创建一个函数,它将数组的行与共享列值相加。
所以输入。
$test = array(
array("c", 5, 6),
array("c", 2, 3),
array("test", 5, 6)
);
输出。
$testduplicatefree = array(
array("c", 7, 9),
array("test", 5, 6)
)
);
我在想
function combine_duplicates($array,$col){
...
...
return $duplicatefreearray;
}
其中$ col是重复的自由数组。 所以,就我而言,
combine_duplicates($test,0);
会得到我想要的输出。 感谢您的帮助。
答案 0 :(得分:1)
<?php
function combine_duplicates($array,$col) {
$index = array();
foreach ($array as $row) {
$key = $row[$col];
if (!isset($index[$key])) {
$index[$key] = $row;
} else {
for ($i = 0; $i < count($row); ++$i) {
if ($i != $col) {
$index[$key][$i] += $row[$i];
}
}
}
}
return array_values($index);
}
$array = array(
array("c", 5, 6),
array("c", 2, 3),
array("test", 5, 6)
);
print_r(combine_duplicates($array, 0));
答案 1 :(得分:1)
我假设每个数组中的第一个值(在本例中为“c”)是用于确定两行是否重复的键。在这种情况下,您可以使用索引数组替换您提供的数组,如下所示:
array(
c=>array(5,6)
test=>array(5,6)
...
)
逐个添加行,并测试您使用的索引是否已经存在,例如if in_array("c", array_keys($my_array))
。如果索引不存在,请使用该索引创建一个新数组。如果存在,则迭代该行并将其每个值添加到现有数组中的相应列。例如,当您使用键“c”到达第二行时,您将其第一个值添加到$my_array["c"][0]
,将第二个值添加到$my_array["c"][1]
。