【问题标题】:What is wrong with this php array?这个 php 数组有什么问题?
【发布时间】:2009-07-30 22:00:03
【问题描述】:
$canada_territories = array("British Columbia" => "British Columbia",  "Manitoba" => "Manitoba", "New Brunswick" => "New Brunswick", "Newfoundland and Labrador" => "Newfoundland and Labrador", "Nova Scotia" => "Nova Scotia", "Northwest Territories" => "Northwest Territories", "Nunavut" => "Nunavut", "Ontario" => "Ontario", "Prince Edward Island" => "Prince Edward Island", "Quebec" => "Quebec", "Saskatchewan" => "Saskatchewan", "Yukon" => "Yukon");
print_r($canada_territories);

最终成为

Array ( [British Columbia [Manitoba]] => British Columbia [Manitoba] => Manitoba [New Brunswick] => New Brunswick [Newfoundland and Labrador] => Newfoundland and Labrador [Nova Scotia] => Nova Scotia [Northwest Territories] => Northwest Territories [Nunavut] => Nunavut [Ontario] => Ontario [Prince Edward Island] => Prince Edward Island [Quebec] => Quebec [Saskatchewan] => Saskatchewan [Yukon] => Yukon )

ritish Columbia [Manitoba] 是通过添加下一个数组项的一部分而开始出错的地方

这是什么原因造成的?

我正在尝试构建这个数组来填充下拉表单,我对数组了解不够,我是否真的需要将不列颠哥伦比亚省两次添加到数组中才能循环遍历它们?

这是我通常使用的,但它通常有一个我设置的键和值,在这种情况下,我需要在下面显示两次值,而我通常会显示 2 个不同的值

foreach ($state_array as $sid => $statename) {
      print '<option value=' . $sid . $selected . '>' . $statename . '</option>';
}

更新

我没有用标签包装,它显示了我在 chrome 中发布的方式,当我查看源代码时它实际上是正确的

【问题讨论】:

  • 在这种情况下,由于您不需要键,因此您可以按照混乱的建议定义没有键的数组。在这种情况下,如果您使用 foreach($array as $key => $array) 那么 $key 将是整数数组索引(因为如果您不指定键,PHP 会自动添加从零开始的数组索引)。跨度>

标签: php arrays


【解决方案1】:

您发布的数组规范或输出没有任何问题。我怀疑您只是以某种方式误读了print_r() 结果。

不过,要填充下拉列表,您只需要:

$canada_territories = array( 
    "British Columbia",  
    "Manitoba",
    "New Brunswick", 
    "Newfoundland and Labrador",
    "Northwest Territories",
    "Nunavut",
    "Ontario",
    "Prince Edward Island",
    "Quebec",
    "Saskatchewan",
    "Yukon",
);
print_r($canada_territories);

也许这样不会那么混乱。

【讨论】:

    【解决方案2】:

    我认为数组没问题,问题出在标签上。

    你有:

    foreach ($canada_territories as $sid => $statename) {
      print '<option value=' . $sid . $selected . '>' . $statename . '</option>' . "\n";
    }
    

    这很糟糕,因为没有引号,浏览器会假定 value 结束 value 后的第一个空格。以下是生成的错误 HTML:

    <option value=British Columbia>British Columbia</option>
    <option value=Manitoba>Manitoba</option>
    <option value=New Brunswick>New Brunswick</option>
    <option value=Newfoundland and Labrador>Newfoundland and Labrador</option>
    <option value=Nova Scotia>Nova Scotia</option>
    <option value=Northwest Territories>Northwest Territories</option>
    <option value=Nunavut>Nunavut</option>
    <option value=Ontario>Ontario</option>
    <option value=Prince Edward Island>Prince Edward Island</option>
    <option value=Quebec>Quebec</option>
    <option value=Saskatchewan>Saskatchewan</option>
    <option value=Yukon>Yukon</option>
    

    试试这个:

    foreach ($canada_territories as $sid => $statename) {
      print "<option value=\"{$sid}\" $selected>{$statename}</option>\n";
    }
    

    生成这个:

    <option value="British Columbia" >British Columbia</option>
    <option value="Manitoba" >Manitoba</option>
    <option value="New Brunswick" >New Brunswick</option>
    <option value="Newfoundland and Labrador" >Newfoundland and Labrador</option>
    <option value="Nova Scotia" >Nova Scotia</option>
    <option value="Northwest Territories" >Northwest Territories</option>
    <option value="Nunavut" >Nunavut</option>
    <option value="Ontario" >Ontario</option>
    <option value="Prince Edward Island" >Prince Edward Island</option>
    <option value="Quebec" >Quebec</option>
    <option value="Saskatchewan" >Saskatchewan</option>
    <option value="Yukon" >Yukon</option>
    

    【讨论】:

      【解决方案3】:

      如果你使用单引号而不是双引号会出现问题吗?

      了解Array函数的好参考 => http://us2.php.net/manual/en/function.array.php

      【讨论】:

        【解决方案4】:

        我没有看到这个:

        $ php
        <?php 
        
        print_r(array("British Columbia" => "British Columbia",  "Manitoba" => "Manitoba", "New Brunswick" => "New Brunswick", "Newfoundland and Labrador" => "Newfoundland and Labrador", "Nova Scotia" => "Nova Scotia", "Northwest Territories" => "Northwest Territories", "Nunavut" => "Nunavut", "Ontario" => "Ontario", "Prince Edward Island" => "Prince Edward Island", "Quebec" => "Quebec", "Saskatchewan" => "Saskatchewan", "Yukon" => "Yukon")); 
        
        Array
        (
            [British Columbia] => British Columbia
            [Manitoba] => Manitoba
            [New Brunswick] => New Brunswick
            [Newfoundland and Labrador] => Newfoundland and Labrador
            [Nova Scotia] => Nova Scotia
            [Northwest Territories] => Northwest Territories
            [Nunavut] => Nunavut
            [Ontario] => Ontario
            [Prince Edward Island] => Prince Edward Island
            [Quebec] => Quebec
            [Saskatchewan] => Saskatchewan
            [Yukon] => Yukon
        )
        

        您确定输出结果的方式可以真实地展示您所拥有的吗?

        【讨论】:

        • 啊,我没有用 标签包装,它显示了我在 chrome 中发布的方式,当我查看源代码时它实际上是正确的
        【解决方案5】:

        这里打印得很好。

        <?php
        $canada_territories = array("British Columbia" => "British Columbia",  "Manitoba" => "Manitoba", "New Brunswick" => "New Brunswick", "Newfoundland and Labrador" => "Newfoundland and Labrador", "Nova Scotia" => "Nova Scotia", "Northwest Territories" => "Northwest Territories", "Nunavut" => "Nunavut", "Ontario" => "Ontario", "Prince Edward Island" => "Prince Edward Island", "Quebec" => "Quebec", "Saskatchewan" => "Saskatchewan", "Yukon" => "Yukon");
        print_r($canada_territories);
        ?>
        

        输出

        Array
        (
            [British Columbia] => British Columbia
            [Manitoba] => Manitoba
            [New Brunswick] => New Brunswick
            [Newfoundland and Labrador] => Newfoundland and Labrador
            [Nova Scotia] => Nova Scotia
            [Northwest Territories] => Northwest Territories
            [Nunavut] => Nunavut
            [Ontario] => Ontario
            [Prince Edward Island] => Prince Edward Island
            [Quebec] => Quebec
            [Saskatchewan] => Saskatchewan
            [Yukon] => Yukon
        )
        

        【讨论】:

          【解决方案6】:

          首先,为什么要强制数组的键和值是相同的值?似乎您应该删除关联的文本并让它以数字方式对其进行索引。

          其次,单引号与双引号不是问题,尽管您应该使用单引号,这样您就不会强制 PHP 查找不存在的 $vars(双引号的目的之一)。有很多关于这方面的文章:http://www.google.com/search?q=php+single+vs+double+quotes

          最后,我根本没有得到你运行代码时的结果:

          Array
          (
              [British Columbia] => British Columbia
              [Manitoba] => Manitoba
              [New Brunswick] => New Brunswick
              [Newfoundland and Labrador] => Newfoundland and Labrador
              [Nova Scotia] => Nova Scotia
              [Northwest Territories] => Northwest Territories
              [Nunavut] => Nunavut
              [Ontario] => Ontario
              [Prince Edward Island] => Prince Edward Island
              [Quebec] => Quebec
              [Saskatchewan] => Saskatchewan
              [Yukon] => Yukon
          )
          

          【讨论】:

          • 是的,我更新了,这只是我的浏览器在没有预标记的情况下显示它的方式,谢谢
          猜你喜欢
          • 1970-01-01
          • 2011-02-13
          • 2010-11-01
          • 2011-08-26
          • 2011-10-19
          • 1970-01-01
          • 1970-01-01
          • 2011-07-07
          • 1970-01-01
          相关资源
          最近更新 更多