2016-08-30 4 views
2

コードネイターでMySQLとPHPを使用して次のネストJSONデータを作成する方法を教えてください。AnglesJsにMySQLとPHPを使用したネストされたJSONデータ| ng-options

私は指定されたフォーマットでデータを必要とします。

$data = { 
    'India': { 
     'Andhra Pradesh': ['Vijayawada', 'Guntur', 'Nellore', 'Kadapa'], 
     'Madhya Pradesh': ['Hyderabad', 'Warangal', 'Karimnagar'], 
    }, 
    'USA': { 
     'San Francisco': ['SOMA', 'Richmond', 'Sunset'], 
     'Los Angeles': ['Burbank', 'Hollywood'] 
    }, 
    'Australia': { 
     'New South Wales': ['Sydney', 'Orange', 'Broken Hill'], 
     'Victoria': ['Benalla', 'Melbourne'] 
    } 
}; 

マイ・モデル・コードは以下の通りです:

public function getAll() 
    { 
     $query = $this->db->query("SELECT 
     `country`.`countryName` 
     , `states`.`name` AS `stateName` 
     , `cities`.`cityName` 
     FROM 
     `tablename`.`states` 
     INNER JOIN `tablename`.`country` 
      ON (`states`.`country_ID` = `country`.`ID`) 
     INNER JOIN `tablename`.`cities` 
      ON (`cities`.`state_id` = `states`.`ID`);"); 

     return $query->result(); 

    } 

とコントローラのコードは以下の通りである:

public function getAllData() 
{ 
    //get All details 
    $this->load->model('Shiksha_model','locations'); 
    $data = $this->locations->getAll(); 
    echo json_encode($data); 
} 

下記のように、私は出力に含まをゲート制御しています:

[ 
    { 
    "countryName": "INDIA", 
    "stateName": "West-Bengal", 
    "cityName": "Kolkata" 
    }, 
    { 
    "countryName": "INDIA", 
    "stateName": "Bihar", 
    "cityName": "Purnia" 
    } 
] 
+0

ドロップダウンの選択にはどのようなオプションがありますか? –

+0

そのドロップダウン部分は、目的のJSONデータでうまく動作しています。しかし、ネストしたJSON形式のデータを構築/エコーアウトすることはできません。 { 'インド':{ 'Andhra Pradesh':['Vijayawada'、 'Guntur'、 'Nellore'、 'Kadapa']、 'Madhya Pradesh':['ハイデラバード' 、 'Warangal'、 'Karimnagar']、 }、....ドロップダウンは私の心配ではなく、jsonデータをフォーマットすることが私の主な問題です。 – Developerscentral

+0

角度フィルタを使用しようとすると、フロントエンドで必要に応じてフィルタリングすることができます。コントローラーでも簡単にアクセスできます。//github.com/a8m/angular-filter –

答えて

1

ちょうど繰り返すと何を構築する必要があります:

$result = []; 
foreach ($data as $row) { 
    if (!isset($result[$row['countryName']])) 
    $result[$row['countryName']] = []; 
    if (!isset($result[$row['countryName']][$row['stateName']])) 
    $result[$row['countryName']][$row['stateName']] = []; 
    $result[$row['countryName']][$row['stateName']][] = $row['cityName']; 
} 
return json_encode($result); 

同じクライアント側コードでも同じ結果が得られます。

0

これは私のモデルで行った変更であり、現在は完全に機能しています! ありがとうございます...

public function getAll() 
    { 
     $query = $this->db->query("SELECT 
     `country`.`countryName` 
     , `states`.`name` AS `stateName` 
     , `cities`.`cityName` 
     FROM 
     `tablename`.`states` 
     INNER JOIN `tablename`.`country` 
      ON (`states`.`country_ID` = `country`.`ID`) 
     INNER JOIN `tablename`.`cities` 
      ON (`cities`.`state_id` = `states`.`ID`);"); 

     $data = $query->result_array(); 

     $result = []; 
     foreach ($data as $row) { 
      if (!isset($result[$row['countryName']])) 
      $result[$row['countryName']] = []; 
      if (!isset($result[$row['countryName']][$row['stateName']])) 
      $result[$row['countryName']][$row['stateName']] = []; 
      $result[$row['countryName']][$row['stateName']][] = $row['cityName']; 
     } 

     return $result; 
    } 
関連する問題