Поиск

Доступ к элементам массива

Независимо от того, как был создан м.ассив, есть только один способ извлече ния из него конкретного элемента (точнее, его значения) обращение к мас сиву с указанием индекса этого элемента. Один из вариантов работы с массива ми присвоение значения Конкретного элемента отдельной переменной с помощью соответствующего оператора:

$Total = $Array[l];

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

.print ("The total of your "order comes to $Array [Total]");

При печати из массива придется опускать кавычки, в которые обычно за ключается индекс, так как они конфликтуют с другими кавычками в самой ин струкции print ( ) . Следующий фрагмент кода вызовет сообщение об ошибке:

print ("The total of your order comes to $Array["Total"]"};

А это пример использования кавычек, которые не вызовут никаких ослож нений:

$Array["Name"] = trim($Array["Name"]);

К сожалению, функциональность, делающая массивы такими полезными, способность хранить множество значений в одной переменной несет с собой и дополнительные требования, которые не свойственны другим типам пере менных. Так, для доступа к элементам массива необходимо знать их ключи. Если массив был создан из строк как массив $ Soups, обращение к функции $ Soups [ 1 ] не даст никаких результатов. И, так как переменные чувствительны к регистру, вызов $ Soups [ "monday" ] вернет пустую строку, потому что запись Clam Chowder имеет другой индекс: $Soups [ "Monday"].

К счастью, существует быстрый и легкий способ доступа ко всем значениям массива: использовать цикл вместе с функцией each ( ) . Последняя извлекает из массива значения ключа и собственно элемента массива. Если вызвать функ цию each ( ) столько раз, сколько элементов содержит массив, то мы пройдем по всем его элементам:

for ($n = 0; $n < count{$Array); $n++) {
$Line = each ($Array);
print ("Key.is equal to $Line[key].<BR>Value is equal
—to $Line[value].");

В этом примере функция each ( ) создает пару значений, то есть массив из двух элементов с именем $Line, который содержит ключ и значение для масси ва $Аггау в его текущем положении. Можно представить, что в массиве есть некий внутренний указатель. При первом использовании функции each ( ) он находится на самом первом элементе массива $Аггау. Функция each ( ) извлечет значения ключа и элемента, затем присвоит их элементу $Line [key] (а также $Line [0]) и $Line [value] (то же самое, что и $Line [1]) соответственно. По сле этого указатель будет передвинут на следующий элемент. При втором вызо ве функции each ( ) извлеченным окажется второй набор значений и т.д. Нам остается только обернуть вокруг функции each ( ) цикл for ( ) , чтобы пройти по все элементам массива.

Теперь можно переписать сценарий soups.php, опираясь на только что по лученные знания. Вместо простого вывода на экран монитора количества эле ментов массива мы будем обращаться к реальным значениям.

Вывод значений любого массива на экран монитора

  1. Создайте новый PHPдокумент в текстовом редакторе.
  2. Напишите стандартный HTMLзаголовок (листинг 7.4).
  3. <HTMLxHEADxTITLE>Using Arrays</TITLEx/HEADxBODY>.

    Листинг 7.4 т Цикл это наиболее распространенный способ доступа ко всем элементам массива. В этом сценарии функция each ( ) определяет ключи и значения массива, которые затем выводятся в браузере.

    1<HTML>
    2 <HEAD>
    3 <TITLE>Using Arrays</TITLEx/HEAD>
    4 <BODY>
    5 <?php
    6 $Soups = array(
    7 "Monday"=>"Clam Chowder",
    8 "Tuesday"=>"White Chicken Chili",
    9 "Wednesday"=>"Vegetarian",
    10 "Thursday"=>"Chicken Noodle",
    11 "Friday"=>"Tomato",
    12 "Saturday"=>"Cream of Broccoli"
    13 );
    14 for ($n = 0; $n < count($Soups); $n++) {
    15 $Line = each ($Soups);
    16 print ("$Line[key]'s soup is $Line[value].<P>n");
    17 }
    18 ?>
    19 </BODY>
    20 </HTML>
  4. Откройте PHPраздел страницы и инициируйте массив $Soups.
  5. <?php
    $Soups = array(
    "Monday"=>"Clarn Chowder",
    "Tuesday"=>"White Chicken Chili",
    "Wednesday"=>"Vegetarian",
    "Thursday"=>"Chicken Noodle",
    "Friday"=>"Tomato",
    "Saturday"=>"Cream of Broccoli"
  6. Начните цикл for для доступа к каждому элементу массива.
  7. for ($n = 0; $n < count ($Soups) ; $П+.+ ) {

    Этот цикл присваивает значение 0 счетчику цикла $п. Затем проверяется величина $п. Если она меньше, чем количество элементов в массиве, то цикл выполняется и значение переменной $п увеличивается на единицу.

  8. С помощью функции each С) извлеките ключи и значения, затем распеча тайте их.
  9. SLine = each ($Soups);

    Цикл присвоит ключи и значения массива $Soups массиву $Line через функ цию each ( ) . Затем он распечатает ключ и значение.

  10. Закройте цикл, РНР и HTML.
  11. }?></BODYx/HTML>
  12. Сохраните страницу как soups.php, загрузите ее на сервер и протестируй те в браузере (рис.).

Лучше было бы создать переменную для значения count ($Array) и использо вать ее в заголовке цикла for ( ) . В этом случае длина массива при каждой итера ции пересчитываться не будет.