【需求】二维数组中存了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);