网站地图    收藏   

主页 > php专栏 > php数组查询 >

php二维数组的合并2种方法 - php数组

来源:自学PHP网    时间:2014-11-25 21:17 作者: 阅读:

[导读] 昨天还写了一篇关于数组合并的技术文章,那里我介绍的是一维数组合并,这里介绍一下php二维数组的合并方法,希望对各位同学会有所帮助哦。...

php二维数组的合并2种方法

昨天还写了一篇关于数组合并的技术文章,那里我介绍的是一维数组合并,这里介绍一下php二维数组的合并方法,希望对各位同学会有所帮助哦。

例1:自定义方法合并数组,先看一个二维数组,代码如下:

  1. <?php 
  2. Array ( 
  3.           [0] => Array ( 
  4.                               [A] => store_name 
  5.                               [B] => 商店一 
  6.                              ) 
  7.           [1] => Array ( 
  8.                               [A] => store_owner 
  9.                               [B] => 小风 
  10.                               ) 
  11.           [2] => Array ( 
  12.                               [A] => store_name 
  13.                               [B] => 商店二 
  14.                               ) 
  15.           [3] => Array ( 
  16.                                [A] => store_owner 
  17.                                [B] => 小磊 
  18.                                ) 
  19. ?> 

大家会发现里面有两个 store_name 和 store_owner,所以我想让他们合并成下面这样

  1. <?php  
  2. Array ( 
  3.      [0] => Array 
  4.          ( 
  5.            [A] => 商店一 
  6.            [B] => 小风 
  7.           ) 
  8.       [1] => Array 
  9.          ( 
  10.            [A] => 商店二 
  11.            [B] => 小磊 
  12.           ) 
  13. ?> 

合并方法如下,代码如下:

  1. <?php 
  2. $stores = array(); //定义一个空数组 
  3.         $store_count=count($showinfo);  //统计显示的次数,这里的$showinfo是我获取数据库内容时的一个变量,然后打印出来就是上面刚开始的样子 
  4.         for($i=0;$i<$store_count;$i++) 
  5.         { 
  6.             $j=$i+1;     //将 $i 加 1 跳过 一级  相当于 $j 取得是 键值为 奇数的值 
  7.             $stores[]=array
  8.                           'name' =>$showinfo[$i]['value'], 
  9.                           'owner'=>$showinfo[$j]['value'], 
  10.                           ); 
  11.             $i = $j;  //  这里的作用是 相当于 $i 取得是 键值为 偶数的值 
  12.         } 
  13. ?> 

这样就可以得到上面的结果了,为了让大家看的更清楚些,我把数据库表结构写出来,主要字段如下:

  1. key value 
  2. store_name 网店一 
  3. store_owner 小风 
  4. store_name 网店二 
  5. store_owner 小磊 

通过上面的方法做过后,前台页面就可以以一排的方式显示了,如下

  1. name owner 
  2. 网店一 小风 
  3. 网店二 小磊 

例2,代码如下:

  1. <?php 
  2. $arr = array 
  3.     0 => array
  4.     '1@01,02'
  5.     '2@01,02'
  6.     '4@ALL'
  7.     '3@01'
  8.     '5@01,02,04'
  9.     ), 
  10.     1 => array
  11.     '1@01,02,03'
  12.     '2@01,02,04'
  13.     '3@ALL'
  14.     '4@01,02'
  15.     '111@01,05'
  16.     '5@03'
  17.     ), 
  18.     2 => array
  19.     '1@01,02,03'
  20.     '2@02,03,05'
  21.     '3@ALL'
  22.     '4@01,02,03'
  23.     '111@01,05'
  24.     '5@03'
  25.     ), 
  26. ); 
  27. $result = array(); 
  28. foreach($arr as $items){ 
  29.     if(is_array($items)){ 
  30.         foreach($items as $item){ 
  31.             $item = explode('@'$item); 
  32.             if(count($item) != 2){ 
  33.                 continue ; 
  34.             } 
  35.             $result[$item[0]] .= $item[1].','
  36.         } 
  37.     } 
  38. function reJoin(&$item,$key,$seq){ 
  39.     $list = array_unique(explode($seq,$item)); 
  40.     if (in_array('ALL'$list)){ 
  41.         $item = $key.'@ALL'
  42.     }else
  43.         $item = $key.'@'.join($seq,$list); 
  44.     } 
  45. array_walk($result'reJoin',','); 
  46. sort($result); 
  47. var_export($result); 
  48. /** 
  49.  * array ( 
  50.   * 0 => '111@01,05,', 
  51.   * 1 => '1@01,02,03,', 
  52.   * 2 => '2@01,02,04,03,05,', 
  53.   * 3 => '3@ALL', 
  54.   * 4 => '4@ALL', 
  55.   * 5 => '5@01,02,04,03,', 
  56.   * ) 
  57.  */ 
  58. ?> 

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论