2016-09-14 32 views
2

我有一些問題。我需要使用PHP以適當的格式調整我的數組大小。我在下面給我的數據。無法使用PHP將數組排序成適當的格式

$result = Array 
(
    [0] => Array 
     (
      [cat_id] => 2 
      [cat_name] => spirit 
      [subcat_id] => 20 
      [subcat_name] => pizza 
     ) 

    [1] => Array 
     (
      [cat_id] => 2 
      [cat_name] => spirit 
      [subcat_id] => 22 
      [subcat_name] => wine 
     ) 

    [2] => Array 
     (
      [cat_id] => 3 
      [cat_name] => Food 
      [subcat_id] => 23 
      [subcat_name] => pakhal 
     ) 

    [3] => Array 
     (
      [cat_id] => 3 
      [cat_name] => Food 
      [subcat_id] => 24 
      [subcat_name] => fuddy 
     ) 

); 

上述數組應按以下格式排列。

$data = [{ 
      "category" : "Spirits", 
      'cat_id' : 2, 
      "subCatgory" : [{ 
        "id" : "20", 
        "name" : "pizza" 
       }, 
       { 
        "id" : "22", 
        "name" : "wine" 
       }] 
     }, 
     { 
      "category" : "Food", 
      "cat_id" : "3", 
      "subCatgory" : [{ 
        "id" : "23", 
        "name" : "pakhal" 
       }, 
       { 
        "id" : "24", 
        "name" : "fuddy" 
       }] 
     }] 

我在下面做過,但沒有給出所需的格式。

<?php 
    $result=array(array('cat_id'=>'2','cat_name'=>'spirit','subcat_id'=>'20','subcat_name'=>'pizza'),array('cat_id'=>'2','cat_name'=>'spirit','subcat_id'=>'22','subcat_name'=>'wine'),array('cat_id'=>'3','cat_name'=>'Food','subcat_id'=>'23','subcat_name'=>'pakhal'),array('cat_id'=>'3','cat_name'=>'Food','subcat_id'=>'24','subcat_name'=>'fuddy')); 

    for($i=0;$i<count($result);$i++){ 
     if($i==0){ 
      $data[]=array("category"=>$result[$i]['cat_name'],"cat_id"=>$result[$i]['cat_id'],"subCatgory"=>array(array("id"=>$result[$i]['subcat_id'],"name"=>$result[$i]['subcat_name']))); 
     }else{ 

     for($j=0;$j<count($data);$j++){ 
       if($data[$j]['cat_id']==$result[$i]['cat_id']){ 
        for($k=0;$k<count($data[$j]['subCatgory']);$k++){ 
         if($data[$j]['subCatgory'][$k]['id']==$result[$i]['subcat_id']){ 
          $find=1; 
          break; 
         }else{ 
          $find=0; 
         } 

        } 
        if($find==0){ 
        $data[$j]['subCatgory'][]=array("id"=>$result[$i]['subcat_id'],"name"=>$result[$i]['subcat_name']); 
        } 
        if($find==1){ 
         break; 
        } 

       }else{ 
        $data[]=array("category"=>$result[$i]['cat_name'],"cat_id"=>$result[$i]['cat_id'],"subCatgory"=>array(array("id"=>$result[$i]['subcat_id'],"name"=>$result[$i]['subcat_name']))); 

       } 

      } 
     } 
    } 
echo json_encode($data); 
?> 

上面的代碼給出了錯誤的格式。請幫幫我。

+4

的可能的複製[如何排序數組按使用PHP鍵值] (http://stackoverflow.com/questions/39469531/how-to-sort-array-as-per-key-value-using-php) –

+0

但沒有迴應。 – subhra

+0

你從代碼中得到的輸出是什麼?你可以添加到你的文章? – rbr94

回答

1

這裏我有寫您的解決方案:

<?php 
    $result = array(
     array( 
      'cat_id' => '2', 
      'cat_name' => 'spirit', 
      'subcat_id' => '20', 
      'subcat_name' => 'pizza' 
     ), 
     array(
      'cat_id' => '2', 
      'cat_name' => 'spirit', 
      'subcat_id' => '20', 
      'subcat_name' => 'pizza' 
     ), 
     array(
      'cat_id' => '2', 
      'cat_name' => 'spirit', 
      'subcat_id' => '22', 
      'subcat_name' => 'wine' 
     ), 
     array(
      'cat_id' => '3', 
      'cat_name' => 'Food', 
      'subcat_id' => '23', 
      'subcat_name' => 'pakhal' 
     ), 
     array(
      'cat_id' => '3', 
      'cat_name' => 'Food', 
      'subcat_id' => '24', 
      'subcat_name' => 'fuddy' 
     ) 
    ); 

$finalArr = array(); 
foreach($result as $arr) { 
    $finalArr[] = array(
     'category' => $arr['cat_name'], 
     'cat_id' => $arr['cat_id'] 
    ); 
    $subCatArr[$arr['cat_id']][] = array(
     'id' => $arr['subcat_id'], 
     'name' => $arr['subcat_name'] 
    ); 
} 

foreach($subCatArr as $key => $sub) { 
    $subCatArr[$key] = array_map("unserialize", array_unique(array_map("serialize", $sub))); 
} 

$finalArr = array_map("unserialize", array_unique(array_map("serialize", $finalArr))); 



foreach($finalArr as $key => $a) { 
    if(array_key_exists($a['cat_id'],$subCatArr)) { 
     $finalArr[$key]['subCatgory'] = array_values($subCatArr[$a['cat_id']]); 
    } 
} 

echo json_encode(array_values($finalArr)); 

請試試這個。

+0

給出結果'{「0」:{「category」:「spirit」,「cat_id」:「2」,「subCatgory」:[{「id」:「20」,「name」:「pizza」 },{ 「id爲」: 「22」, 「姓名」: 「葡萄酒」}]}, 「3」:{ 「類別」: 「食品」, 「CAT_ID」: 「3」, 「subCatgory」:[{」 id「:」23「,」name「:」pakhal「},{」id「:」24「,」name「:」fuddy「}]}}'這裏我不需要索引像'0,3'。 – subhra

+0

我知道,但我在想同一個 –

+0

在這裏我已經糾正了你的解決方案。請檢查 –

0

你可以試試這個:

<?php 
$array = array(array('cat_id'=>'2','cat_name'=>'spirit','subcat_id'=>'20','subcat_name'=>'pizza'),array('cat_id'=>'2','cat_name'=>'spirit','subcat_id'=>'22','subcat_name'=>'wine'),array('cat_id'=>'3','cat_name'=>'Food','subcat_id'=>'23','subcat_name'=>'pakhal'),array('cat_id'=>'3','cat_name'=>'Food','subcat_id'=>'24','subcat_name'=>'fuddy')); 
$result = array(); 
$subCat = array(); 

foreach($array as $key => $val) { 
    /** Here we build a sub category structure */ 
    $subCat = array('id' => $val['subcat_id'], 'name' => $val['subcat_name'],); 

    /** Here we build the rest */ 
    $result[$val['cat_id']]['category']   = $val['cat_name']; 
    $result[$val['cat_id']]['cat_id']   = $val['cat_id']; 
    $result[$val['cat_id']]['subCategory'][] = $subCat; 
} 

$result = array_values($result); 
print_r(json_encode($result)); 
1
 $result=array(array('cat_id'=>'2','cat_name'=>'spirit','subcat_id'=>'20','subcat_name'=>'pizza'),array('cat_id'=>'2','cat_name'=>'spirit','subcat_id'=>'20','subcat_name'=>'pizza'),array('cat_id'=>'2','cat_name'=>'spirit','subcat_id'=>'22','subcat_name'=>'wine'),array('cat_id'=>'3','cat_name'=>'Food','subcat_id'=>'23','subcat_name'=>'pakhal'),array('cat_id'=>'3','cat_name'=>'Food','subcat_id'=>'24','subcat_name'=>'fuddy')); 
     $ids= array(); 
     $unique_ids=array(); 
     $output=array();   
     foreach ($result as $res) { 
      array_push($ids,$res['cat_id']);      
     } 
     $unique_ids=array_unique($ids); 
     foreach ($unique_ids as $key=>$uid) { 
      $sub=array(); 
      foreach ($result as $res) {        
       if($res['cat_id']==$uid) 
       { 
        $name=$res['cat_name']; 
        array_push($sub, array("id"=>$res['subcat_id'], "name"=>$res['subcat_name'])); 
       } 
      } 
      array_push($output, array("category"=>$name, "cat_id"=>$uid,"subCategory"=> array_values(array_unique($sub,SORT_REGULAR)))); 
     } 
     var_dump(json_encode($output)); 
+0

其工作不正常。 – subhra

+0

最新的問題是什麼? –

+0

這裏問題是如果重複的數據集存在,那麼它會來兩次。 – subhra

0

你可以試試下面的功能... Quick-Test Here...

<?php 


    $arr = [ 
     [ 
      "cat_id"  => 2, 
      "cat_name"  => "spirit", 
      "subcat_id"  => 20, 
      "subcat_name" => "pizza", 
     ], 
     [ 
      "cat_id"  => 2, 
      "cat_name"  => "spirit", 
      "subcat_id"  => 22, 
      "subcat_name" => "wine", 
     ], 
     [ 
      "cat_id"  => 3, 
      "cat_name"  => "Food", 
      "subcat_id"  => 23, 
      "subcat_name" => "pakhal", 
     ], 
     [ 
      "cat_id"  => 3, 
      "cat_name"  => "Food", 
      "subcat_id"  => 24, 
      "subcat_name" => "fuddy", 
     ] 
    ]; 

    function groupByCatID($arr){ 
     $groups = []; 
     foreach($arr as $k=>$subArr){ 
      $subCat = [ 
       "id" => $subArr['subcat_id'], 
       "name" => $subArr['subcat_name'], 

      ]; 
      $tmpArr = [ 
       "category"  => $subArr['cat_name'], 
       'cat_id'  => $subArr['cat_id'], 
       "subCategory" => [], 
      ]; 
      if(is_array($subArr)){ 
       if(!array_key_exists($subArr['cat_name'], $groups)){ 
        $groups[$subArr['cat_name']] = []; 
        $groups[$subArr['cat_name']] = $tmpArr; 
        $groups[$subArr['cat_name']]['subCategory'][0] = $subCat; 
       }else{ 
        $groups[$subArr['cat_name']]['subCategory'][] = $subCat; 
       } 
      } 
     } 
     return json_encode(array_values($groups)); 
    } 

    var_dump(groupByCatID($arr)); 
    //PRODUCES: 
    '[ 
     {"category":"spirit", 
     "cat_id":2,"subCategory":[ 
         {"id":20,"name":"pizza"}, 
         {"id":22,"name":"wine"} 
       ] 
      }, 

     {"category":"Food", 
     "cat_id":3,"subCategory":[ 
        {"id":23,"name":"pakhal"}, 
        {"id":24,"name":"fuddy"} 
       ] 
      } 
    ]'