php数组根据某键值,把相同键值的合并最终生成一个新的二维数组

待处理数组
array(
[0]=>array(
'id'=>'1',
'names'=>'jack',
'0'=>'sendone'
),
[1]=>array(
'id'=>'3',
'names'=>'tree',
'0'=>'sendtwo'
),
[2]=>array(
'id'=>'5',
'names'=>'apple',
'0'=>'sendtwo'
),
);
需要把相同的合成一个新数组(比如例子中'0'=>'sendtwo'的),键值未知,处理后
array(
[0]=>array(
[0]=>array(
'id'=>'1',
'names'=>'jack',
'0'=>'sendone'
),
[1]=>array(
[0]=>array(
'id'=>'3',
'names'=>'tree',
'0'=>'sendtwo'
),
[1]=>array(
'id'=>'5',
'names'=>'apple',
'0'=>'sendtwo'
),
),
),
);

1、新建php文件。

2、创建名为$a1的数组并为数组添加元素。

3、创建名为$a2的数组并为数组添加元素。

4、创建名为$a3的数组并为数组添加元素。

5、array_diff_assoc() 比较三个数组的键名和键值,并返回差集。

6、打印差集。

7、预览效果如图。

温馨提示:内容为网友见解,仅供参考
第1个回答  2017-12-26
php数组根据某一个键值,把相同键值的合并生成一个新的二维数组
源数据:
$infos = array( array( 'a' => 36, 'b' => 'xa', 'c' => '2015-08-28 00:00:00', 'd' => '2015/08/438488a00b3219929282e3652061c2e3.png'
), array( 'a' => 3, 'b' => 'vd', 'c' => '2015-08-20 00:00:00', 'd' => '2015/08/438488a00b3219929282e3652061c2e3.png'
), array( 'a' => 6, 'b' => 'wwe', 'c' => '2015-08-28 00:00:00', 'd' => '2015/08/438488a00b3219929282e3652061c2e3.png'
), array( 'a' => 36, 'b' => 'se', 'c' => '2015-08-28 00:00:00', 'd' => '2015/08/438488a00b3219929282e3652061c2e3.png'
), array( 'a' => 6, 'b' => 'aw', 'c' => '2015-08-28 00:00:00', 'd' => '2015/08/438488a00b3219929282e3652061c2e3.png'
), array( 'a' => 36, 'b' => 'bv', 'c' => '2015-08-28 00:00:00', 'd' => '2015/08/438488a00b3219929282e3652061c2e3.png'
), array( 'a' => 12, 'b' => 'xx', 'c' => '2015-08-27 00:00:00', 'd' => '2015/08/438488a00b3219929282e3652061c2e3.png'
)
);1234567891011121314151617181920212223242526272829303132333435363738394041424344

处理要求:将数组中a相同的二维数组合并到一个数组中,生成一个新的数组
代码:
<?php
$result= array(); foreach ($infos as $key => $info) { $result[$info['a']][] = $info;
}
print_r($result);123456

输出:
Array(
[36] => Array
(
[0] => Array
(
[a] => 36
[b] => xa
[c] => 2015-08-28 00:00:00
[d] => 2015/08/438488a00b3219929282e3652061c2e3.png
)

[1] => Array
(
[a] => 36
[b] => se
[c] => 2015-08-28 00:00:00
[d] => 2015/08/438488a00b3219929282e3652061c2e3.png
)

[2] => Array
(
[a] => 36
[b] => bv
[c] => 2015-08-28 00:00:00
[d] => 2015/08/438488a00b3219929282e3652061c2e3.png
)

)

[3] => Array
(
[0] => Array
(
[a] => 3
[b] => vd
[c] => 2015-08-20 00:00:00
[d] => 2015/08/438488a00b3219929282e3652061c2e3.png
)

)

[6] => Array
(
[0] => Array
(
[a] => 6
[b] => wwe
[c] => 2015-08-28 00:00:00
[d] => 2015/08/438488a00b3219929282e3652061c2e3.png
)

[1] => Array
(
[a] => 6
[b] => aw
[c] => 2015-08-28 00:00:00
[d] => 2015/08/438488a00b3219929282e3652061c2e3.png
)

)

[12] => Array
(
[0] => Array
(
[a] => 12
[b] => xx
[c] => 2015-08-27 00:00:00
[d] => 2015/08/438488a00b3219929282e3652061c2e3.png
)

)

)
第2个回答  推荐于2017-12-26
foreach($sourceArray as $k=>$v) {
$result[$v["sendto"]][] = $v; // sendto 根据你想要的
}追问

谢谢回答。
不过键值是不固定的,但是所有键名都是固定的,就是判断键名是0的键值相同的(比如例子中'0'=>'sendtwo'的),放到一个数组里;其他键名的也单独放在一个数组。标题表达错了,最终的数组应该是三维的~

追答

一样,键值键名不固定都无所谓。只要改$v["sendto"] 这里把sendto改成你的键名就行了。。 你先试试再说。。。。

追问

谢谢啊,键值是数字或字母可以,中文不行呢。

本回答被提问者采纳

PHP合并具有相同键值的二维数组
arr=array(0=>array('a'=>'语言'),1=>array('b'=>'数学'),2=>array('a'=>'语文'));newarr=array();foreach($arr as $k=>$v){ foreach($v as $t=>$z){ newarr[$t][]=$z;} }

php将二维数组值数组里某一个键值一样的拼装成一个三维数组
<?php $indexArr = array(); $newArr = array(); foreach ($sourceArr as $v) { \/\/ 判断该order_id是否已经存在于新数组中 if (array_key_exists($v['order_id'], $indexArr)) { \/\/ 获取该order_id在新数组中的位置 $k = $indexArr[$v['order_id']];...

PHP两个一维数组合并为二维数组
<?php$arr1=array('足球','篮球');$arr2=array('冰棒','雪糕');\/\/方法一:直接组合$B=array($arr1,$arr2);\/\/方法二:键值组合$C=array();$C['运动项目']=$arr1;$C['吃的']=$arr2;\/\/输出看看echo "";print_r($B);print_r($C);\/\/附加:当然,这两个数组还可以在组合$f...

PHP计算二维数组中一维数组相同键名的,键值相加
arr = array();foreach($test as $v){ if(isset($arr[key($v)])){ $arr[key($v)] += current($v); }else{ $arr[key($v)] = current($v); }}print_r($arr);结果如图:

php合并两个二维数组,如果两个二维数组的id值相等,则合并为一个新的数 ...
function mergeById(&$a,&$b){ c=array();foreach($a as $e)$c[$e['id']]=$e;foreach($b as $e)$c[$e['id']]=isset($c[$e['id']])? $c[$e['id']]+$e : $e;return $c;} a=\/\/数组一;b=\/\/数组二;var_dump(mergeById($b,$a));=== array 1 => array ...

php怎样数据库行循环生成二维数组并替换其中的值再生成新的二维数组
另外你的这个 貌似在while里面用不到foreach,,smarty引擎我没用过,按理说它的赋值 应该也不用while一个一个赋值,把$smarty->assign('art_recommend_row',$new_result);这个赋值拿到循环外面(smarty没用过,按照thinkphp yii2 这些框架来说 赋值给模板不需要放在循环里面),我按照我的想法把你的改...

PHP 二维数组根据条件合并
function mergById($arr1, $arr2, $id){$tmp = array();foreach($arr2 as $record){$tmp[$record[$id]][] = $record;}$arr3 = array();foreach($arr1 as $record){$arr3[] = $record;if(isset($tmp[$record[$id]])){foreach($tmp[$record[$id]] as $sameIdRecord){$...

php递归出来的一维数组,怎么合并成一个新的二维数组
foreach成id,我觉得你在得到这个一维数组时就可以做到。下面我默认成你的一维数组key为分类id。<?php data = '你的一维数组';\/\/这里懒得打 foreach($data as $key=>$vo){ if($vo['pid'] != 0){ unset($data[$key]);data[$vo['pid']]['list'][] = $vo;} } print_r($data)...

php编程如何合并二维数组!
利用日期是唯一键值。<?php a1=array(array('2011-1-1',100), array('2011-1-2',200));a2=array(array('2011-1-1',300),array('2011-1-2',400));b=array();foreach($a1 as $e) $b[$e[0]][]=$e[1];foreach($a2 as $e) $b[$e[0]][]=$e[1];var_dump($b);=...

php 多个一维数组合并成一个二维数组
给数组加上变量,然后遍历一下 foreach ($Arr1 as $k => $r) { Arr4[] = array($Arr1[$k],$Arr2[$k],$Arr3[$k]);} echo '';print_r($Arr4);

相似回答