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,', * ) */ ?>查看更多关于php二维数组的合并2种方法 - php数组的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did31354