我想在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);
会让我得到我想要的输出。感谢您对此的任何帮助。
我假设每个数组中的第一个值(在本例中为"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]
。
<?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));
在这里试试: http://codepad.org/MDHEsqhi