ABCを含むランダム配列整理

7156 ワード

【必要】2次元配列にはN組の配列が格納されており、各配列のキー値はtitle(A)、desc(B)、photo(C)であり、ABCの3つのグループごとに新しい2次元配列に整理されている.バックグラウンド構成のデータによる様々な特色を考慮する必要がある.データは以下の通りである.
 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]
【考え方】デフォルトでtitle、desc、photoを含むデータグループ単位tempを構築し、整理対象の配列を遍歴し、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);