包含ABC的随机数组整理

【需求】二维数组中存了N组数组,每个数组的键值是title(A),desc(B),photo(C),将其按照ABC三个一组整理成新的二维数组。需考虑因后台配置的数据导致的各种特色情况。数据如下:

 1 //正常情况ABC
 2 $abc= array(
 3     0=>array("title" => "珍珠泉",),
 4     1=>array( "desc" => "珍珠泉好玩",),
 5     2=>array("photo" => "http://pic3.40017.cn/scenery/destination/2015/06/11/10/cgXhiS_540x304_00.jpg",),
 6     );
 7 //正常情况ABCABC
 8 $abcabc = array(
 9     0=>array("title" => "珍珠泉",),
10     1=>array( "desc" => "珍珠泉好玩",),
11     2=>array("photo" => "http://pic3.40017.cn/scenery/destination/2015/06/11/10/cgXhiS_540x304_00.jpg",),
12     3=>array("title" => "九华山",),
13     4=>array( "desc" => "佛教圣地",),
14     5=>array("photo" => "http://pic3.40017.cn/scenery/destination/2015/06/11/10/cgXhiS_540x304_00.jpg",),
15     );
16 //特殊情况A
17 $a = array(
18     0=>array("title" => "珍珠泉",),
19     );
20 //特殊情况AABC
21 $aabc = array(
22     0=>array("title" => "珍珠泉",),
23     1=>array("title" => "九华山",),
24     2=>array( "desc" => "佛教圣地",),
25     3=>array("photo" => "http://pic3.40017.cn/scenery/destination/2015/06/11/10/cgXhiS_540x304_00.jpg",),
26     );
27 //特殊情况ACBC
28 $acbc = array(
29     0=>array("title" => "珍珠泉",),
30     1=>array("photo" => "http://pic3.40017.cn/scenery/destination/2015/06/11/10/cgXhiS_540x304_00.jpg",),
31     2=>array( "desc" => "佛教圣地",),
32     3=>array("photo" => "http://pic3.40017.cn/scenery/destination/2015/06/11/10/cgXhiS_540x304_00.jpg",),
33     );
34 //特殊情况ABBC
35 $abbc =array(
36     0=>array("title" => "珍珠泉",),
37     1=>array( "desc" => "珍珠泉好玩",),
38     2=>array( "desc" => "佛教圣地",),
39     3=>array("photo" => "http://pic3.40017.cn/scenery/destination/2015/06/11/10/cgXhiS_540x304_00.jpg",),
40     );

要实现的效果如下:

整理前      整理后

ABC      [ABC]

ABCABC    [ABC][ABC]

A        [A]

AABC      [A][ABC]

ACBC      [AC][BC]

ABBC      [AB`C]

【思路】建立一个数据组单位temp,该单位默认包含一个title、desc和photo,遍历待整理的数组,发现key为title时先把temp数组保存到returnData数组,再新建一个temp,并把title插入temp数组;发现photo数组后,将photo插入temp数组,temp数组保存到返回returnData数组,再新建一个新的temp数组。对于可能出现的连续desc,通过换行符将它们拼装成一个新的desc并插入temp

【代码】

 1     foreach($a as $value){
 2             if(!isset($value['title'])){
 3                 //标题正文模块
 4                 if(isset($value['desc']) && !empty($value['desc'])){
 5                     //多个标题正文的情况
 6                     if(isset($temp['desc']) && !empty($temp['desc'])){
 7                         $temp['desc'] = $temp['desc'].PHP_EOL.$value['desc'];
 8                     }else{
 9                         $temp['desc'] .= $value['desc'];
10                     }
11                 }else{
12                     //图片模块,出现图片说明了一个数据组的结束
13                     $temp['photo'] = $value['photo'];
14                     if(!empty($temp)){
15                         $returnData[] = $temp;
16                     }
17                     $temp = array();
18                 }
19             }
20             else{
21                 //标题模块,出现标题说明一个数据组的开始
22                 if(!empty($temp)){
23                     $returnData[] = $temp;
24                 }
25                 $temp = array();
26                 $temp['title'] = $value['title'] ;
27             }
28         }
29         if(!empty($temp)){
30             $returnData[] = $temp;
31         }
32        var_dump($returnData);

 

posted @ 2016-01-19 17:29  junxu  阅读(361)  评论(0编辑  收藏  举报