我有这样的数组,
array(
[0]=>111 //id
[1]=>5 //value to ad
[2]=>3 //value to ad
)
array(
[0]=>111
[1]=>3
[2]=>7
)
array(
[0]=>111
[1]=>2
[2]=>1
)
array(
[0]=>222
[1]=>5
[2]=>3
)
如何过滤那些结果为每个“id”显示一次的数组,如果它们具有相同的“id”,则添加“要添加的值”。所以结果将是:
array(
[111]=>array(
[0]=>10
[1]=>11
)
[222]=>array(
[0]=>5
[1]=>3
)
)
感谢答案和建议!
答案 0 :(得分:2)
您必须使用循环手动执行此操作。这样的事情应该有效:
$result = array();
foreach( $input as $row) {
$id = array_shift( $row);
foreach( $row as $key => $value) {
$result[ $id ][ $key ] =
( isset( $result[ $id ][ $key ]) ?
$result[ $id ][ $key ] + $value :
$value
);
}
}
输出
array(2) {
[111]=>
array(2) {
[0]=>
int(10)
[1]=>
int(11)
}
[222]=>
array(2) {
[0]=>
int(5)
[1]=>
int(3)
}
}
答案 1 :(得分:1)
保持简单
foreach ($arrays as $array) {
$final[$array[0]] = array(
@$final[$array[0]][0] + $array[1],
@$final[$array[0]][1] + $array[2]
);
}
答案 2 :(得分:0)
// This is your input.
$Input[] = array(
0=>111, //id
1=>5, //value to ad
2=>3 //value to ad
);
$Input[] = array(
0=>111,
1=>3,
2=>7
);
$Input[] = array(
0=>111,
1=>2,
2=>1
);
$Input[] = array(
0=>222,
1=>5,
2=>3
);
// This is your output.
$Output = array();
for($i=0; $i<count($Input); $i++)
{
$id = $Input[$i][0];
// If key already exists...
if(array_key_exists($id, $Output))
{
// Sum it.
$Output[$id][0] += $Input[$i][1];
$Output[$id][1] += $Input[$i][2];
}
// If not...
else
{
// Initialize it.
$Output[$id][0] = $Input[$i][1];
$Output[$id][1] = $Input[$i][2];
}
}
// This is your output dumped.
print_r($Output);
Array
(
[111] => Array
(
[0] => 10
[1] => 11
)
[222] => Array
(
[0] => 5
[1] => 3
)
)
关键是使用array_key_exists来检查数组中是否已存在索引。