php二维数组的合并2种方法
昨天还写了一篇关于数组合并的技术文章,那里我介绍的是一维数组合并,这里介绍一下php二维数组的合并方法,希望对各位同学会有所帮助哦。
例1:自定义方法合并数组, 先看一个二维数组,代码如下:
<?php
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,所以我想让他们合并成下面这样
<?php
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,',
* )
*/
?>