php-问个PHP数组合并的问题~请高手指点

问题描述

问个PHP数组合并的问题~请高手指点
$arr1=array(
            "0"=>array(
                'id' => '2',
                'b' => 0,
                'num' => 4

                ),

            "1"=>array(
                'id' => '1',
                'b' => 0,
                'num' => 4
                )
        );
        $arr2=array(
            "1"=>array(
                'id' => '3',
                'b' => 0,
                'num' => 4

                ),

            "2"=>array(
                'id' => '2',
                'b' => 0,
                'num' => 4
                )
        );

想要合并这个两个数组,判断条件,id,b两个元素都相同的情况的NUM值相加。新数组键值重新排列0 1 2 3

求高手指点。谢谢。

解决方案

<?php
$arr1=array(
"0"=>array(
'id' => '2',
'b' => 0,
'num' => 4

            ),

        "1"=>array(
            'id' => '1',
            'b' => 0,
            'num' => 4
            )
    );
    $arr2=array(
        "1"=>array(
            'id' => '3',
            'b' => 0,
            'num' => 4

            ),

        "2"=>array(
            'id' => '2',
            'b' => 0,
            'num' => 4
            )
    );

$arr3 = array_merge($arr1, $arr2);
function arr_combine($array){//按照id值进行冒泡排序
$length = count($array);
for($i = 0; $i < $length; $i++) {
for($j = $i+1; $j < $length; $j++){
if ($array[$i]['id'] > $array[$j]['id'] ) {
$tmp = $array[$i];
$array[$i] = $array[$j];
$array[$j] = $tmp;
}else if($array[$i]['id'] == $array[$j]['id'] && $array[$i]['b'] == $array[$j]['b']){//按照id,b值是否相同,进行合并
$array[$i]['num'] = $array[$i]['num']+$array[$j]['num'];
$array[$j]['num'] = 0;//此处将合并过的数组的num设置为0
}
}
}
//对结果数组进行处理,如果num为0,则剔除
foreach( $array as $key => $value ) {
if($value['num'] == 0) unset($array[$key]);
}
return $array;
}
var_dump(arr_combine($arr3));

解决方案二:

虽然有点繁琐,但还是解决了问题,另外一种写法

 foreach($arr1 as $v) $res["$v[id]_$v[b]"] = $v;
foreach($arr2 as $v)
  if(isset($res["$v[id]_$v[b]"])) $res["$v[id]_$v[b]"]['num'] += $v['num'];
  else $res["$v[id]_$v[b]"] = $v;
print_r(array_values($res));
时间: 2024-11-28 16:38:34

php-问个PHP数组合并的问题~请高手指点的相关文章

大家下午好,问一个login登陆的问题,请高手指点。

问题描述 我拖了一个login登陆框,但是里面的一个记住用户名和密码功能,我不知道怎么用请高手们指点,谢谢. 解决方案 解决方案二:先给分解决方案三:没有分了,我现在一分都没有了,有了一定给.解决方案四:顶一下,我也想问这个问题...

JS切分数组问题,跪求高手指点

问题描述 JS切分数组问题,跪求高手指点 展开后可以看到问题 function tz11x5Inputrxds(){ var codeLen=parseInt(this.attr('length'))*2,codes=[],str=$('#textarea-code',this).val().replace(/[^w, ]/g,''),str2=str; str2=strCut(str2,2); var info=['01','02','03','04','05','06','07','08',

问几个api的问题,请高手帮忙

问题描述 1.api多而杂,如何记呢?vc2005对api好像没有智能提示输入(即没有this->然后列出一堆函数供选)2.setfilepointer()4.宽字符与ansi函数有什么区别,怎么知道调用的是哪一个?5.如何知道一个函数的所有错误码,及含义:6.SetEndOfFile可以加长文件吗?个人认为截短文件就可以,加长是怎么做到的呢?先谢了. 解决方案 解决方案二:那就回答5个吧,50分,10分1个.1.API是很多,但都有一定的特征,看到名字基本上能猜出什么名字,MS为我们设计API

一个数组合并问题(JAVA)

问题描述 将N个数组合并,结合形式如下:数组A:1,2,3,4数组B:X,Y,Z,M同下标结合为:1X,2Y,3Z,4M这是第一个问题再还有排序为:1X,2Y,3Z,4M,X1,Y2,z3,m4 解决方案 解决方案二:学习一下解决方案三:每个数组的长度都是一样的?如果是的话,用for循环做字符串连接好了.连完了调用Arrays.sort(object[]arr)好了例如int[]a={1,2,3,4};int[]b={"X","Y","Z",&q

php下将多个数组合并成一个数组的方法与实例代码

1.合并数组 array_merge()函数将数组合并到一起,返回一个联合的数组.所得到的数组以第一个输入数组参数开始,按后面数组参数出现的顺序依次迫加.其形式为: 复制代码 代码如下: array array_merge (array array1 array2-,arrayN) 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面.返回作为结果的数组. 如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值.然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,

php中如何把多个数组合并为一个数组

array_merge() 函数把两个或多个数组合并为一个数组. 如果键名有重复,该键的键值为最后一个键名对应的值(后面的覆盖前面的).如果数组是数字索引的,则键名会以连续方式重新索引. 例如: $news=M('news'); $sql="select count(a.news_id) as count_news,a.menu_id,b.pid from news a left join menu b on a.menu_id=b.menu_id where a.is_pass=0 group

php数组合并与拆分实例分析

 本文实例讲述了php数组合并与拆分的方法.分享给大家供大家参考.具体如下: 1 2 3 4 5 6 7 8 <?php $array1 = array("A","B","C","D"); $array2 = array("1","2","3","4"); $array3 = array("!","@"

php数组合并的二种方法

 这篇文章主要介绍了php数组合并的二种方法,同时讲了用加号和用array_merge合并数组的区别,需要的朋友可以参考下 我们首先给出两个数组   代码如下: <?php    $r = array(1,2,3,4,5,6);    $e = array(7,8,9,10);   ?>      下面我们用array_merge和加号来何必这两数组    代码如下: <?php   print_r($r+e); // 输出<span style="font-family

PHP将两个关联数组合并函数提高函数效率

 在foreach中循环查询数据代码量比较少,但是性能比较低,使用下面的字节写的函数可以解决 在foreach中循环查询数据代码量比较少,但是性能比较低,好点的解决办法是将id收集起来,用in一次性查询,但是这引发了数据结构不是我们用PHP自带的函数可以合并的,今天测试了一下:    使用下面的字节写的函数可以解决    从数据库中取出来的数据总是或多或少不符合我们心目中的数据结构,类似于下面的俩个数组,要形成SQL中类似于left join后两个数组合并:  代码如下: $test1 = Ar