【问题标题】:How can I put my array of countries into a <select> tag?如何将我的国家/地区数组放入 <select> 标记中?
【发布时间】:2020-06-07 13:32:46
【问题描述】:

所以,我正在混合 html/php 项目中创建一个表单,我想要一个选择标签,作为选项提供所有国家/地区列表。 我将列表存储在数组“国家”下,如下所示:

$countries = array("Afghanistan", "Albania", "Algeria", ...."Zambia", "Zimbabwe");

并尝试在我的选择标签中循环,以便每个国家/地区都会弹出一个选项标签。

<div class="form-group">
                            <label for="countries" class="col-md-3 control-label">Countries</label>
                            <div class="col-md-6">
                                <select class="form-control" id="countries" name="countries">
                                    <?php foreach ($countries as $country) { ?>
                                        <option value="<?= $countries->country ?>"><?= $countries->country ?></option>
                                    <?php } ?>
                                </select>
                            </div>
                            <div class="col-md-3 error">
                                <?php error('countries'); ?>
                            </div>
                        </div>

但我得到的是“试图获取非对象的属性”

因此,因为我在 php 方面没有进步,所以如果有人愿意帮助我,我会被正在发生的事情所困扰。谢谢

【问题讨论】:

  • $countries-&gt;country 表示一个对象。但是您将$countries 定义为一个数组。因此,您应该使用&lt;option value="&lt;?= $country ?&gt;"&gt;&lt;?= $country ?&gt;&lt;/option&gt; ... $countries-&gt;country 将是一个不存在的方法country()。您将$countries 定义为一个字符串数组,按外观。因此试图获取非对象的属性

标签: php html arrays foreach


【解决方案1】:

另一种方法是只使用 for 循环。给定数组$countries,你可以这样做:

<select name="country">
<?php
$ct = count($countries)
for($i=0;$i<=$ct;$i++){
$country = $countries[$i];
echo "<option value='$country'>$country</option>";
}
?>
</select>

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    如果您在foreach 中循环$countries as $country,则在循环的每个实例中$countries 的每个元素都会保存在$country 中。

    也就是说,要打印每个国家,循环如下所示:

    foreach ($countries as $country) {
      echo $country;
    }
    

    【讨论】:

    • OP 对语法感到困惑,因为它认为数组属性默认有自己的类似名称的“getter”,但实际上并没有。
    【解决方案3】:

    显然这是错误的部分:

    <?php foreach ($countries as $country) { ?>
        <option value="<?= $countries->country ?>"><?= $countries->country ?></option>
    <?php } ?>
    

    因为foreach ($countries as $country) 的意思是“进入$countries 并在每次迭代时保存$country 中的当前元素”,因此代码应如下所示:

    <?php foreach ($countries as $country) { ?>
        <option value="<?= $country ?>"><?= $country ?></option>
    <?php } ?>
    

    【讨论】:

      【解决方案4】:

      $countries 是一个数组,您正在使用 foreach 循环将数组的值传递给 $country。你只是为了呼应$country。

      <div class="form-group">
             <label for="countries" class="col-md-3 control-label">Countries</label>
             <div class="col-md-6">
                  <select class="form-control" id="countries" name="countries">
                        <?php foreach ($countries as $country) { ?>
                             <option value="<?= $country ?>"><?= $country ?></option>
                        <?php } ?>
                    </select>
              </div>
              <div class="col-md-3 error">
                    <?php error('countries'); ?>
              </div>
      </div>
      

      希望对你有帮助:)

      【讨论】:

      • 在您的帖子中的 cmets 中提到了相同的内容。但只是看到一样。我赞成这个解决方案。
      猜你喜欢
      • 2012-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-25
      • 1970-01-01
      • 2014-05-06
      • 1970-01-01
      相关资源
      最近更新 更多