Учим PHP с нуля: массивы и циклы (часть 2)

От автора:Возвращаясь к тому месту, где закончилась Часть 1 этой серии публикаций, наш учебник продолжит вести вас сквозь основы работы с массивами и циклами PHP. Преподавание основных правил будет вестись с параллельным рассмотрением приемов работы, используемых в популярном софте, таком как WordPress.

 

Краткий обзор

Новичкам: Чтобы полностью понять эти идеи, настоятельно рекомендуется сначала прочесть Часть1. Часть 2 этой серии проясняет использование основных принципов PHP, помогающих в ежедневном кодировании, включая создание и использование массивов и циклов для хранения и поиска данных тогда, когда это необходимо.

Создание массивов в PHP

Массивы PHP – это то, к чему вы приходите, когда снова и снова создаете сходные переменные. При обращении к содержимому массива используются два слова. Эти слова — «key» (ключ) и «value» (значение). Каждый массив PHP при его создании, имеет по крайней мере один ключ и одно значение. Они всегда находятся в парах, так как ключ используется для ссылки на значение. Существует три типа массивов: ассоциативные, числовые и многомерные. Многомерные массивы – это просто массивы внутри массивов. Давайте вкратце рассмотрим два первых типа.

Ассоциативный массив

Ассоциативный массив полезен в том случае, когда ключ («key»), где-то определенный программистом, используется для нахождения значений. Например, я создам массив, содержащий мою личную информацию. Ниже вы увидите два способа записи объявления массива в коде PHP. Отличие второго способа состоит лишь в организации и облегчении чтения. Как упоминалось в Части 1 серии публикаций, PHP не восприимчив к пробелам.

<?php
$personalInfo = array("name"=>"Erik Reagan","occupation"=>"Web Developer","location"=>"Savannah, GA USA");
?>
<?php
$personalInfo = array(
 'name' => 'Erik Reagan',
 'occupation' => 'Web Developer',
 'age' => 23,
 'location' => 'Savannah, GA USA'
 );
?>

Это здорово и все такое, но как мне заставить информацию отображаться в HTML? Рад, что вы спросили об этом! Это очень похоже на вывод переменной, только здесь вы добавляете еще чуть-чуть данных: ключ.

<p>My name is <?=$personalInfo['name']?> and I am a <?=$personalInfo['occupation']?> in <?=$personalInfo['location']?> and am <?=$personalInfo['age']?> years old.</p>

 

Подождите секундочку! Что это вдруг за неразбериха: <?=…?>? Использование <?=?> — это скоропись в PHP вот чего: <?php echo … ?>. Из первой части вы узнали, что команда echo (отображать) сходна с print (печатать) в других языках. PHP-скоропись является всего лишь одним из способов написания в процессе работы меньшего количества кода.

Числовые массивы

Иногда вам внутри массива не нужен текст, ассоциированный со значениями. В этом случае вы используете числовой массив, который в действительности создается в PHP по умолчанию. Выше мы использовали знак равенства, за которым следовал знак «больше» (=>), для присвоения значений массива его ключам. При использовании числовых массивов вы просто указываете значения, а ключ предполагается инкрементальным. Давайте посмотрим:

<?php
$personalInfo = array(
 'name' => 'Erik Reagan',
 'occupation' => 'Web Developer',
 'age' => 23,
 'location' => 'Savannah, GA USA'
 );
$fruit = array('apple','orange','grapes');
?>

Как вы можете видеть, мы ничего не сделали, кроме того, что указали значения. PHP вместо нас позаботился о ключах. Ключи ВСЕГДА начинаются с цифры 0 и увеличиваются на 1 с каждым новым элементом массива. В процессе более глубокого изучения массивов вы узнаете, что это правило можно изменять по своему усмотрению – но сегодня мы это не проходим. «Откуда я узнаю, какой ключ нужно использовать», — можете спросить вы. Проще всего в нашем примере начать считать с нуля и найти свой элемент. Например, ключ для «apple» — это 0, ключ для «orange» – 1, а ключ для «grapes» — 2. Ха, довольно просто! Правда, иногда ваши массивы будут становиться огромными и дойдут до десятков а, возможно, и сотен элементов. Никто не захочет сидеть и считать все это безобразие. Вашим первым инстинктивным порывом может стать желание выполнить «echo $fruit», но он выдаст всего лишь слово «Array». PHP обеспечивает нам несколько простых способов просматривать данные массива. Давайте рассмотрим два из них.

<?php
$personalInfo = array(
 'name' => 'Erik Reagan',
 'occupation' => 'Web Developer',
 'age' => 23,
 'location' => 'Savannah, GA USA'
 );
$fruit = array('apple','orange','grapes');

print_r($personalInfo);

var_dump($fruit);
?>

Обратите внимание, что при запуске всего этого ваш браузер может выдать нечто довольно отталкивающего вида. Первый массив будет особенно непривлекательным и, возможно, трудным для прочтения. Пользу может принести вставка тэгов

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

Array
(
 [0] => apple
 [1] => orange
 [2] => grapes
)
array(4) {
  ["name"]=>
  string(11) "Erik Reagan"
  ["occupation"]=>
  string(13) "Web Developer"
  ["age"]=>
  int(23)
  ["location"]=>
  string(16) "Savannah, GA USA"
}

Первая функция, print_r(), просто напечатает структуру и содержимое вашего массива. Ключи будут слева в квадратных скобках, а значения – справа от соответствующих ключей. С помощью второй функции, var_dump(), вы узнаете немного больше о своих данных. Обратите внимание на ключ «age» в массиве $personalInfo. Его значение не стоит в кавычках, как все остальные. Я сделал это для того, чтобы вы смогли различать два вида данных в PHP. Все, что в кавычках, считается string (строкой), а в случае данных для «age» — это integer (целое). Я не буду вдаваться в детали остальных видов данных, но заостряю на этом ваше внимание, потому что функция var_dump() дает вам дополнительную полезную информацию.

Обратите внимание на первую часть, расположенную в первой строке: «array(4)». Это первая часть вывода, сообщающая: «Это массив, и он содержит 4 элемента данных». Переходя к следующей строке, вы получаете ключ, видите первый ключ, а затем сообщение: «string(11)». Что значит: «Это — строка длиной в 11 знаков» (помните, что пробел считается знаком). Обратитесь к ключу «age» и заметьте, что для него выводится «int(23)». Данное выражение означает: «Это – целое со значением 23″.

Теперь, когда вы знаете, как использовать print_r() и var_dump(), мы сможем перейти к выполнению циклов по этим данным.

Многомерные массивы

Как уже об этом говорилось, многомерный массив – это просто массив, который содержит в себе по крайней мере один дополнительный массив в качестве значения. Я продолжу примером «personalInfo» и создам массив для штата сотрудников.

<?
$company = array(
 'info' => array(
 'name' => 'Awesome Web Company',
 'location' => 'Savannah, GA',
 'website' => 'http://weAreAwesome.com'),
 'staff' => array(
 array('name'=>'Kermit the Frog','position' => 'CEO'),
 array('name'=>'Hiro Nakamura','position' => 'Art Director'),
 array('name'=>'Willy Wonka','position' => 'Web Developer')
  )
);
?>

Как можно видеть, многомерные массивы могут быть замысловатыми. Это странный пример, потому что обычно такой вид данных хранился бы в базе данных и позже извлекался с помощью PHP. Однако ради изучения массивов мы начнем с данных внутри PHP. Первый ключ в этом массиве называется ‘info’ и его значение фактически — ассоциативный массив, содержащий информацию о компании. Второй ключ нашего массива $company – это ‘staff’ (штатное расписание), и его значение – числовой массив. Давайте перед началом работы посмотрим на его структуру. Запуск print_r($company) произведет следующее:

Array
(
 [info] => Array
 (
 [name] => Awesome Web Company
 [location] => Savannah, GA
 [website] => http://weAreAwesome.com
 )

 [staff] => Array
 (
 [0] => Array
 (
 [name] => Kermit the Frog
 [position] => CEO
 )

 [1] => Array
 (
 [name] => Hiro Nakamura
 [position] => Art Director
 )

 [2] => Array
 (
 [name] => Willy Wonka
 [position] => Web Developer
 )
 )
)

Теперь наша информация о компании готова к выборке. Мы выбираем информацию из внутреннего массива тем же способом, как ранее из массива личной информации.

Вот пример использования данных из этого многомерного массива:

<h1><?=$company['info']['name']?></h1>

<p>Located in <?=$company['info']['location']?> and online at <a href="<?=$company['info']['website']?>"><?=$company['info']['website']?></a>.</p>

<h2>Our CEO</h2>
<p><?=$company['staff'][0]['name']?></p>

 

Теперь, когда мы уже освоили массивы, давайте перейдем к циклам, которые сократят до минимума то время, которое мы тратим на анализ данных массива.

Циклы в PHP

Циклы в PHP становятся весьма полезными, когда возрастает количество данных, с которыми вы работаете. Мы уже разобрались с массивами, что естественно ведет нас к циклам. В последнем отрывке кода мы привели список сотрудников компании внутри массива $company. Что, если нам нужно циклически обрабатывать каждого сотрудника компании и выводить информацию на дисплей в единообразном виде? Ну, в дело тогда вступает цикл PHP foreach. Как видно из названия оператора, он будет проделывать указанное действие для каждого из элементов внутри массива или объекта. Обычно это выглядит так:

<?php
foreach($array as $key => $value) {
 ...some code here
}
?>

Обратите внимание, что к этому оператору относятся три переменные. Первая – это просто массив, с которым мы работаем. Вторая и третья переменные определяются ВАМИ и могут сообщать все, что нужно. Эти переменные используются для обозначения данных массива внутри фигурных скобок. Мы через мгновение это увидим. Но сначала, как команда echo имеет условное обозначение или альтернативный синтаксис, так и foreach имеет нечто, помогающее пересекаться PHP и HTML. Таким образом, код остается настолько простым, насколько это возможно. Выглядит это так:

<? foreach($array as $key => $value) : ?>
<p>Some html and some php will go here</p>

<? endforeach; ?>

Вы также увидите аналогичный формат в операторах if и циклах while (в WordPress, например). Теперь, когда мы обсудили формат этого оператора, давайте посмотрим его в работе. Возвращаясь к массиву информации о компании, давайте построим с этими данными какую-нибудь симпатичную страницу.

<?
$company = array(
 'info' => array(
 'name' => 'Awesome Web Company',
 'location' => 'Savannah, GA',
 'website' => 'http://weAreAwesome.com'),
 'staff' => array(
 array('name'=>'Kermit the Frog','position' => 'CEO'),
 array('name'=>'Hiro Nakamura','position' => 'Art Director'),
 array('name'=>'Willy Wonka','position' => 'Web Developer')
  )
);
?>

<h1><?=$company['info']['name']?></h1>
<p>Located in <?=$company['info']['location']?> and online at <a href="<?=$company['info']['website']?>"><?=$company['info']['website']?></a>.</p>

<h2>Our Staff</h2>

<ul>
<?php foreach ($company['staff'] as $person) : ?>
  <li><?=$person['name']?> is our <?=$person['position']?></li>

<?php endforeach; ?>
</ul>

В этом примере цикл foreach проходит по каждому сотруднику и выводит тот HTML и PHP, который мы от него ожидаем. Мне не требуется точно знать, сколько сотрудников записано в массиве, чтобы остановиться, когда перебор подойдет к концу. Я уверен, что вы можете понять, насколько это может быть полезно.

На этом второй урок по изучению PHP, посвящённый созданию массивов и циклов в PHP, завершаем.



Загрузка комментариев...