Что не так с этим массивом php? - PullRequest
0 голосов
/ 31 июля 2009
$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 )

Британская Колумбия [Манитоба] - это то место, где она начинает работать неправильно, добавляя часть следующего элемента массива

Что вызывает это?

Я пытаюсь создать этот массив, чтобы заполнить раскрывающуюся форму, я не знаю достаточно о массиве, нужно ли мне вообще добавлять Британскую Колумбию в массив дважды, чтобы иметь возможность их циклически проходить?

Это то, что я обычно использую, но обычно оно имеет ключ и значение, которые я установил, в этом случае мне нужно показать значение вдвое ниже, где я обычно показываю 2 разных значения

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

UPDATE

Я не оборачивал тегами, и он показал, как я разместил в Chrome, когда я просматриваю источник, это действительно правильно

Ответы [ 6 ]

2 голосов
/ 31 июля 2009

Нет ничего плохого в спецификации массива, который вы публикуете, или в выводе. Я подозреваю, что вы просто неправильно читаете 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);

Может быть, это будет менее запутанным.

1 голос
/ 31 июля 2009

Я думаю, что с массивом все в порядке, проблема в тегах.

У вас есть:

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

Что не так, потому что без кавычек браузер предполагает первый пробел после значения, заканчивающего значение. Вот в результате плохой 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>
0 голосов
/ 31 июля 2009

Во-первых, почему вы заставляете ключ и значение массива быть одинаковыми? Похоже, вы должны отбросить связанный текст и позволить ему индексировать его численно.

Во-вторых, здесь не одиночные и двойные кавычки, хотя вы должны использовать одинарные кавычки, чтобы не заставлять 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
)
0 голосов
/ 31 июля 2009

Здесь печатается просто отлично.

<?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
)
0 голосов
/ 31 июля 2009

Я не вижу этого:

$ 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
)

Вы уверены, что выводите свои результаты таким образом, чтобы действительно показать вам, что у вас есть?

0 голосов
/ 31 июля 2009

Проблема возникает, если вы используете одинарные кавычки вместо двойных?

Хорошая справка для понимания функции Array => http://us2.php.net/manual/en/function.array.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...