$arrayall=array(
array('id'=>1,'count'=>1),
array('id'=>2,'count'=>2),
array('id'=>3,'count'=>3),
array('id'=>4,'count'=>3)
);
$array1=array(
array('id'=>1,'count'=>1),
array('id'=>2,'count'=>2),
array('id'=>3,'count'=>35),
array('id'=>5,'count'=>42)
);
把array1 '加到'$arrayall 上
id一样的 就把count相加
$arrayall 中有的id而$array1中没有的 这样的直接保留
$arrayall中没有的id而$array1有的 就直接加到$arrayall中
都是二维数组
上述两个数组按照这个规则结果是
echo "<pre>";
print_r($arrayall)
echo "</pre>";
Array(
[0] => Array(
[id] => 1
[count] => 2
)
[1] => Array
(
[id] => 2
[count] => 4
)
[2] => Array
(
[id] => 3
[count] => 38
)
[3] => Array
(
[id] => 5
[count] => 42
)
[4] => Array
(
[id] => 4
[count] => 3
)
)
论坛100金币求一个php函数
http://17zencart.com/forum.php?mod=viewthread&tid=370&fromuid=1
array('id'=>1,'count'=>1),
array('id'=>2,'count'=>2),
array('id'=>3,'count'=>3),
array('id'=>4,'count'=>3)
);
$array1=array(
array('id'=>1,'count'=>1),
array('id'=>2,'count'=>2),
array('id'=>3,'count'=>35),
array('id'=>5,'count'=>42)
);
把array1 '加到'$arrayall 上
id一样的 就把count相加
$arrayall 中有的id而$array1中没有的 这样的直接保留
$arrayall中没有的id而$array1有的 就直接加到$arrayall中
都是二维数组
上述两个数组按照这个规则结果是
echo "<pre>";
print_r($arrayall)
echo "</pre>";
Array(
[0] => Array(
[id] => 1
[count] => 2
)
[1] => Array
(
[id] => 2
[count] => 4
)
[2] => Array
(
[id] => 3
[count] => 38
)
[3] => Array
(
[id] => 5
[count] => 42
)
[4] => Array
(
[id] => 4
[count] => 3
)
)
论坛100金币求一个php函数
http://17zencart.com/forum.php?mod=viewthread&tid=370&fromuid=1
<?php
function arrayMerge($a, $b)
{
$ac = array();
$bc = array();
$ret = array();
foreach($a as $v)
{
$ac[$v['id']] = $v['count'];
}
foreach($b as $v)
{
$bc[$v['id']] = $v['count'];
}
foreach($bc as $k => $v)
{
if (isset($ac[$k]))
{
$ac[$k] += $v;
}
else
{
$ac[$k] = $v;
}
}
foreach ($ac as $k => $v)
{
$ret[] = array(
'id' => $k,
'count' => $v
);
}
return $ret;
}
$arrayall=array(
array('id'=>1,'count'=>1),
array('id'=>2,'count'=>2),
array('id'=>3,'count'=>3),
array('id'=>4,'count'=>3)
);
$array1=array(
array('id'=>1,'count'=>1),
array('id'=>2,'count'=>2),
array('id'=>3,'count'=>35),
array('id'=>5,'count'=>42)
);
print_r(arrayMerge($arrayall, $array1));
?>对数组做了一下转换,便于合并,这样时间效率是线性的
$arrayall=array(
array('id'=>1,'count'=>1),
array('id'=>2,'count'=>2),
array('id'=>9,'count'=>3),
array('id'=>4,'count'=>3)
);
$array1=array(
array('id'=>1,'count'=>1),
array('id'=>2,'count'=>2),
array('id'=>6,'count'=>35),
array('id'=>5,'count'=>42)
);$rs = array();
foreach($array1 as $k=>$v) {
$rs[$v['id']] = $v;
}
array_map('map', $arrayall);var_dump($rs);
function map($v)
{
global $rs;
$rs[$v['id']]['count'] += intval($v['count']);
}
/**
输出结果:
array(6) {
[1]=>
array(2) {
["id"]=>
int(1)
["count"]=>
int(2)
}
[2]=>
array(2) {
["id"]=>
int(2)
["count"]=>
int(4)
}
[6]=>
array(2) {
["id"]=>
int(6)
["count"]=>
int(35)
}
[5]=>
array(2) {
["id"]=>
int(5)
["count"]=>
int(42)
}
[9]=>
array(1) {
["count"]=>
int(3)
}
[4]=>
array(1) {
["count"]=>
int(3)
}
}
*/
就是
$arrayall=array(
array('id'=>1,'count'=>1,'ddd'=>1),
array('id'=>2,'count'=>2,'ddd'=>2),
array('id'=>3,'count'=>3,'ddd'=>9),
array('id'=>4,'count'=>3,'ddd'=>1)
);
$array1=array(
array('id'=>1,'count'=>1,'ddd'=>1),
array('id'=>2,'count'=>2,'ddd'=>2),
array('id'=>3,'count'=>35,'ddd'=>9),
array('id'=>5,'count'=>42,'ddd'=>2)
)
'ddd' 代表还有其他的值 也要在新的数组中出现 'ddd'的值如果id一样 $array1和$arrayall 肯定是一样的
直接抄下来就好了
沙发哥 这样就可能实现了
板凳哥 你这可以实现 我这里不能用全局的 TT
楼上的哥哥 你运行的结果有点问题
Array
(
[0] => Array
(
[id] => 1
[count] => 2
[ddd] => 1
) [1] => Array
(
[id] => 2
[count] => 4
[ddd] => 2
) [2] => Array
(
[id] => 3
[count] => 38
[ddd] => 9
) [3] => Array
(
[id] => 4
[count] => 3
[ddd] => 1
) [4] => Array
(
[count] => 42
))
最后一个题目不符合
Array
(
[0] => Array
(
[id] => 1
[count] => 2
[ddd] => 1
) [1] => Array
(
[id] => 2
[count] => 4
[ddd] => 2
) [2] => Array
(
[id] => 3
[count] => 38
[ddd] => 9
) [3] => Array
(
[id] => 4
[count] => 3
[ddd] => 1
) [4] => Array
( [count] => 42
))
foreach($arrayall as $t) $r[$t['id']] = $t; //按 id 建立索引
foreach($array1 as $t) {
if(isset($r[$t['id']])) $r[$t['id']]['count'] += $t['count'];
else $r[$t['id']] = $t;
}
print_r($arrayall = array_values($r));
function two_array_add($arrayall,$array1){
if(!is_array($arrayall) && count($arrayall)<1){
$arrayall=$array1;
$new_array=$array1;
}else{
foreach ($array1 as $key=>$value){
if(isinarray($value['id'],'id',$arrayall)){
foreach($arrayall as $keyy=>$valuee){
if($valuee['id']===$value['id']){
$valuee['count']+=$value['count'];
$new_array[]=$valuee;
}
}
}else{
$arrayall[]=$value;
$new_array[]=$value;
}
}
}
foreach($arrayall as $kkkk=>$vvvv){
if(!isinarray($vvvv['id'],'id',$new_array)){
$new_array[]=$vvvv;
}
}
return $new_array;
}function isinarray($num,$value,$array){
foreach ($array as $k=>$v){
$key = array_search($num, $v);
if($value===$key){
return true;
}
}
return false;
}
$arrayall=array(
array('id'=>1,'count'=>1,'ddd'=>1),
array('id'=>2,'count'=>2,'ddd'=>2),
array('id'=>3,'count'=>3,'ddd'=>9),
array('id'=>4,'count'=>3,'ddd'=>1)
);
$array1=array(
array('id'=>1,'count'=>1,'ddd'=>1),
array('id'=>2,'count'=>2,'ddd'=>2),
array('id'=>3,'count'=>35,'ddd'=>9),
array('id'=>5,'count'=>42,'ddd'=>2)
);
$addarray=two_array_add($arrayall,$array1);
echo "<pre>";
print_r($addarray);
echo "</pre>";
?>
运行结果:
Array
(
[0] => Array
(
[id] => 1
[count] => 2
[ddd] => 1
) [1] => Array
(
[id] => 2
[count] => 4
[ddd] => 2
) [2] => Array
(
[id] => 3
[count] => 38
[ddd] => 9
) [3] => Array
(
[id] => 5
[count] => 42
[ddd] => 2
) [4] => Array
(
[id] => 4
[count] => 3
[ddd] => 1
))效果已经有了 但是感觉可以简化的 求大神帮忙 我这个太复杂了
代码简单 明了 读这样的代码就是一种享受 我简单装饰下
<?php
function two_array_add($arrayall,$array1){
if(!is_array($arrayall)) return $array1;
if(!is_array($array1)) return $arrayall;
foreach($arrayall as $t)
$r[$t['id']] = $t; //按 id 建立索引
foreach($array1 as $t) {
if(isset($r[$t['id']])) $r[$t['id']]['count'] += $t['count'];
else $r[$t['id']] = $t;
}
return array_values($r);
}
?>