php二维数组的合并2种方法
昨天还写了一篇关于数组合并的技术文章,那里我介绍的是一维数组合并,这里介绍一下php二维数组的合并方法,希望对各位同学会有所帮助哦。
例1:自定义方法合并数组,先看一个二维数组,代码如下:
Array( [0] => Array( [A] => store_name[B] => 商店一 ) [1] => Array( [A] => store_owner[B] => 小风 ) [2] => Array( [A] => store_name[B] => 商店二 ) [3] => Array( [A] => store_owner[B] => 小磊 )
大家会发现里面有两个 store_name 和 store_owner,所以我想让他们合并成下面这样
Array ( [0] => Array ( [A] => 商店一 [B] => 小风 ) [1] => Array ( [A] => 商店二 [B] => 小磊 )
合并方法如下,代码如下:
<?php
$stores = array(); //定义一个空数组
$store_count = count($showinfo); //统计显示的次数,这里的$showinfo是我获取数据库内容时的一个变量,然后打印出来就是上面刚开始的样子
for ($i = 0; $i < $store_count; $i++) {
$j = $i + 1; //将 $i 加 1 跳过 一级 相当于 $j 取得是 键值为 奇数的值
$stores[] = array(
'name' => $showinfo[$i]['value'],
'owner' => $showinfo[$j]['value'],
);
$i = $j; // 这里的作用是 相当于 $i 取得是 键值为 偶数的值
}
?>这样就可以得到上面的结果了,为了让大家看的更清楚些,我把数据库表结构写出来,主要字段如下:
key value store_name 网店一 store_owner 小风 store_name 网店二 store_owner 小磊
通过上面的方法做过后,前台页面就可以以一排的方式显示了,如下
name owner 网店一 小风 网店二 小磊
例2,代码如下:
<?php
$arr = array(
0 => array(
'1@01,02',
'2@01,02',
'4@ALL',
'3@01',
'5@01,02,04',
) ,
1 => array(
'1@01,02,03',
'2@01,02,04',
'3@ALL',
'4@01,02',
'111@01,05',
'5@03',
) ,
2 => array(
'1@01,02,03',
'2@02,03,05',
'3@ALL',
'4@01,02,03',
'111@01,05',
'5@03',
) ,
);
$result = array();
foreach ($arr as $items) {
if (is_array($items)) {
foreach ($items as $item) {
$item = explode('@', $item);
if (count($item) != 2) {
continue;
}
$result[$item[0]].= $item[1] . ',';
}
}
}
function reJoin(&$item, $key, $seq) {
$list = array_unique(explode($seq, $item));
if (in_array('ALL', $list)) {
$item = $key . '@ALL';
} else {
$item = $key . '@' . join($seq, $list);
}
}
array_walk($result, 'reJoin', ',');
sort($result);
var_export($result);
/**
* array (
* 0 => '111@01,05,',
* 1 => '1@01,02,03,',
* 2 => '2@01,02,04,03,05,',
* 3 => '3@ALL',
* 4 => '4@ALL',
* 5 => '5@01,02,04,03,',
* )
*/
?>
教程网址:http://www.phprm.com/shuzu/fs1584.html
欢迎收藏∩_∩但请保留本文链接。