foreach循环不列出所有状态

时间:2014-06-06 17:24:27

标签: php html arrays

我的网站上有一个下拉菜单,我希望列出所有美国州。我有一系列状态,但我似乎无法将所有状态加载到我的<option>标记中。下面是作为数组的前15个状态和我的<select>代码。最终,下拉列表将链接到每个状态的单独页面以及该状态的图像(这就是为什么我在每个状态数组中都有一个“img”)。我在下拉列表中加载的唯一状态是:阿拉斯加州,阿肯色州,科罗拉多州,特拉华州,佛罗里达州,夏威夷州和伊利诺伊州。

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>

2 个答案:

答案 0 :(得分:4)

您在$state["id"]之后的选项标记的右括号旁边缺少结束的``'引号。

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

答案 1 :(得分: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值&amp;使用array_merge将其合并到现有数组中。

相关问题