2016-08-30 17 views
2

任何人都可以請告訴我如何在codeigniter中使用MySQL和PHP創建以下嵌套的JSON數據。使用MySQL和PHP爲AngularJs嵌套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格式數據。我需要幫助來格式化數據,例如'印度':{'Vijayawada','Guntur','Nellore','Kadapa'], 'Madhya Pradesh':[''Hyderabad' ,'Warangal','Karimnagar'], },.... drop-down並不是我所關心的,格式化json數據是我的主要問題。 – Developerscentral

+0

嘗試使用角度過濾器,它可以讓你根據你的需要在前端進行過濾,你也可以在控制器中輕鬆訪問.https://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; 
    }