2014-01-24 64 views
1

我選擇下拉列表中,我呼應城市的名單:如何在foreach陣列分成片上的PHP

$pdo = new PDO(...); 
$cities = $pdo->query('SELECT `id`, `city` FROM `cities` ORDER BY `id` ASC'); 
$cities->execute(); 
foreach($cities as $row) { 
echo '<option value="'.$row['city'].'">'.$row['city'].'</option>'; 
} 

我需要通過國OPTGROUP來劃分所有的城市,比如現在我有:

<select> 
<option value="Edmonton">Edmonton</option> 
<option value="Ottawa">Ottawa</option> 
<option value="Winnipeg">Winnipeg</option> 
<option value="Chicago">Chicago</option> 
<option value="Los Angeles">Los Angeles</option> 
<option value="New York">New York</option> 
</select> 

,我需要得到:

<optgroup label="Canada"> 
<option value="Edmonton">Edmonton</option> 
<option value="Ottawa">Ottawa</option> 
<option value="Winnipeg">Winnipeg</option> 
</optgroup> 
<optgroup label="USA"> 
<option value="Chicago">Chicago</option> 
<option value="Los Angeles">Los Angeles</option> 
<option value="New York">New York</option> 
</optgroup> 

清單及ID不會改變,我證明了恩充足的只有那麼它足夠的ID

+0

我不認爲'array_slice()'是要走的路。一個地方可能有5個城市,或者只有1個,所以他不知道什麼時候分割。他需要數據庫中的另一個領域來定義城市在哪個土地上。 –

+0

設置QRY爲組由國家... – user1844933

+0

不,在DB另一個領域是不必要的,該列表將不會改變,因此這足以通過ID來劃分它:從ID = 1〜ID = 3等。 – stckvrw

回答

1

首先,你必須修改你的數據庫,有全國列。 然後,請按照此代碼。

$pdo = new PDO(...); 
$cities = $pdo->query('SELECT `id`, `city`, `country` FROM `cities` ORDER BY `id` ASC'); 
$cities->execute(); 
$data = array(); 
foreach($cities as $row) { 
$data[$row['country']][] = $row['city']; 
} 
foreach($data as $country){ 
echo "<optgroup label='{$country}'>"; 
foreach($country as $city){ 
echo "<option value='{$city}'>{$city}</option>"; 
} 
echo "</optgroup>"; 
} 
+0

謝謝,現在我得到了我需要的optgroups,但所有的標籤都是「Array」。怎麼了? – stckvrw

1

我不知道我的理解o.k來劃分的,但如果你想按自己國家的城市,你需要從數據庫中獲得contry了。希望這有助於