2014-06-06 32 views
0

我在我的網站上有一個下拉菜單,我希望列出所有美國州。我有一系列的狀態,但我似乎無法將它們全部加載到我的<option>標記中。下面是前15個州的數組和我的<select>代碼。最終下拉將鏈接到每個狀態的單獨頁面,並顯示該狀態的圖像(這就是爲什麼我在每個狀態陣列中都有一個「img」)的原因。我下載的唯一州是阿拉斯加州,阿肯色州,科羅拉多州,特拉華州,佛羅里達州,夏威夷州和伊利諾伊州。狀態foreach循環未列出所有狀態

enter image description here

<?php 
$states = array(); 
$states['AL'] = array (
    "name" => "Alabama", 
    "img" => "http://getwidgetsfree.com/images/state_png/al.png" 
); 
$states['AK'] = array (
    "name" => "Alaska", 
    "img" => "http://getwidgetsfree.com/images/state_png/ak.png" 
); 
$states['AZ'] = array (
    "name" => "Arizona", 
    "img" => "http://getwidgetsfree.com/images/state_png/az.png" 
); 
$states['AR'] = array (
    "name" => "Arkansas", 
    "img" => "http://getwidgetsfree.com/images/state_png/ar.png" 
); 
$states['CA'] = array (
    "name" => "California", 
    "img" => "http://getwidgetsfree.com/images/state_png/ca.png" 
); 
$states['CO'] = array (
    "name" => "Colorado", 
    "img" => "http://getwidgetsfree.com/images/state_png/co.png" 
); 
$states['CT'] = array (
    "name" => "Connecticut", 
    "img" => "http://getwidgetsfree.com/images/state_png/ct.png" 
); 
$states['DE'] = array (
    "name" => "Delaware", 
    "img" => "http://getwidgetsfree.com/images/state_png/de.png" 
); 
$states['DC'] = array (
    "name" => "District of Columbia", 
    "img" => "http://pharmacoding.com/dendreon/provenge/images/dc.png" 
); 
$states['FL'] = array (
    "name" => "Florida", 
    "img" => "http://getwidgetsfree.com/images/state_png/fl.png" 
); 
$states['GA'] = array (
    "name" => "Georgia", 
    "img" => "http://getwidgetsfree.com/images/state_png/ga.png" 
); 
$states['HI'] = array (
    "name" => "Hawaii", 
    "img" => "http://getwidgetsfree.com/images/state_png/hi.png" 
); 
$states['ID'] = array (
    "name" => "Idaho", 
    "img" => "http://getwidgetsfree.com/images/state_png/id.png" 
); 
$states['IL'] = array (
    "name" => "Illinois", 
    "img" => "http://getwidgetsfree.com/images/state_png/il.png" 
); 
$states['IN'] = array (
    "name" => "Indiana", 
    "img" => "http://getwidgetsfree.com/images/state_png/in.png" 
); 
?> 

<select> 
<?php 
foreach($states as $state) { 
echo "<option value='state.php?id=" . $state["id"] . ">" . $state["name"] . "</option>"; 
}; 
?> 
</select> 
+8

你曾經在'foreach'循環中定義了'$ state [「id」]'嗎? – esswilly

回答

4

$state["id"]之後缺少一個右``」報價,旁邊的選項標籤的右括號。

<?php 
foreach($states as $state) { 
echo "<option value='state.php?id=" . $state["id"] . "'>" . $state["name"] . "</option>"; 
}; 
?> 
+0

果然!謝謝!! – user2916637

0

要回答最直接的問題,您在設置<option>時缺少結束報價。那麼當你的結構中不存在該鍵時,你正在設置$state["id"]。您應該使用該陣列中的實際密鑰。

因此,考慮到這一點,這裏是我重新考慮的代碼版本。請注意,您可以使用帶雙引號的字符串替換("),因此不需要連接。這使得這更容易閱讀和調試。

echo '<select>'; 
foreach($states as $state_key => $state_value) { 
echo "<option value='state.php?id=$state_key'>" 
    . $state_value["name"] 
    . "</option>" 
    ; 
}; 
echo '</select>'; 

也就是說,你可以通過使用像這樣的數組簡化代碼:

$states = array(); 
$states['al'] = array('name' => 'Alabama'); 
$states['ak'] = array('name' => 'Alaska'); 
$states['az'] = array('name' => 'Arizona'); 
$states['ar'] = array('name' => 'Arkansas'); 
$states['ca'] = array('name' => 'California'); 
$states['co'] = array('name' => 'Colorado'); 
$states['ct'] = array('name' => 'Connecticut'); 
$states['de'] = array('name' => 'Delaware'); 
$states['de'] = array('name' => 'Delaware'); 
$states['dc'] = array('name' => 'District of Columbia'); 
$states['fl'] = array('name' => 'Florida'); 
$states['ga'] = array('name' => 'Georgia'); 
$states['hi'] = array('name' => 'Hawaii'); 
$states['id'] = array('name' => 'Idaho'); 
$states['il'] = array('name' => 'Illinois'); 
$states['in'] = array('name' => 'Indiana'); 

echo '<select>'; 
foreach($states as $state_key => $state_value) { 
    $states[$state_key] = array_merge($states[$state_key], array('img' => "http://getwidgetsfree.com/images/state_png/$state_key.png")); 
    $state_key_uc = strtoupper($state_key); 
    echo "<option value='state.php?id=$state_key_uc'>" 
    . $state_value['name'] 
    . "</option>" 
    ; 
}; 
echo '</select>'; 

的目標是你開始了與有數組鍵小寫狀態碼的基本陣列。然後像以前一樣設置name。但是當您執行foreach循環時,則只需將img值&合併到使用array_merge到現有數組中。