пятница, 4 июля 2014 г.

PHP. Структуры данных (массивы). Работа с множествами (циклы).

PHP. Структуры данных (массивы). Работа с множествами.

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



Массивы.
Для создания коллекций в PHP существует один тип - массив. Форма и внутренняя структура такой коллекции зависит только от фантазии разработчика. Ключевое слово для создания массива: array:

<?php
  $users = array("Vasya", "Petya", "Kolya");



Начиная с PHP 5.4 появилась сокращенная (и очень логичная) форма конструктора массива:

<?php
  $users = ["Vasya", "Petya", "Kolya"];


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

<?php
  $users = array("Vasya", "Petya", "Kolya");
  print "Hello, " . $users[0];


Для добавления значения в массив мы можем использовать пустой оператор квадратных скобок:

<?php
  $users = array("Vasya", "Petya", "Kolya");
  $users[] = "Olya";


Ассоциативные массивы.
Коллекции такого рода иначе называют "словарями", т.к. они строятся по принципу "ключ": "значение". Т.е. каждому уникальному ключу соответствует свое значение. В отличие от списочных массивов последовательность расположения элементов в ассоциативных коллекциях имеет условное значение. Как правило, она зависит от порядка определения или добавления элементов. Синтаксис создания ассоциативных массивов в целом схож с простыми массивами, ключ и значение разделяются оператором  =>  :

<?php
  $user = array("name" => "Vasya", "age" => 20, 'is_admin' => true);  print "user " . $user['name'] . " has " . $user['age'] . " years old."; 


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

<?php
  $user = array("name" => "Vasya", "age" => 20);
  $user["is_admin"] = true;


Циклы.

Множества данных неразрывно связаны с алгоритмическими циклами. Первое порождает второе и наоборот. Основных циклов три: while, for, foreach. Каждый имеет свою специфику, хотя, при необходимости, можно заменить любой любым. Дело в предпочтениях и лаконичности кода.

 for 
Цикл for имеет синтаксис, аналогичный таковым в большинстве процедурных языков.
for(инициализация; проверка условия; цикличное выражение) { тело цикла }
инициализация - тут мы устанавливаем начальные значения используемых переменных, например - счетчика итераций, выполняется один раз перед началом работы цикла.
проверка условия - тут выполняется логическое выражение перед каждой итерацией цикла, например - проверка значение счетчика.
циклическое выражение - выполняется после каждой итерации, как правило - изменяет значение счетчика.
Пример:

<?php
  for ($i = 0; $i < 10; ++$i){
    print "iteration " . $i . ", ";
  }


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

<?php
  $users = array("Vasya", "Petya", "Kolya", "Olya", "Zhenya");
  for ($i = 0; $i < 5; ++$i){
    print "user " . $users[$i] . "<br />";
  }


Аналогично мы можем сгенерировать массив с нужным количеством значений.

<?php
  $users = array();
  for ($i = 0; $i < 5; ++$i){
    $users[] = $i * 10 + $i%10;
  }


 while 
Синтаксис:
while(логическое выражение){ тело цикла }
логическое выражение - условие, проверяемое перед каждой итерацией цикла. если выражение возвращает true - итерация выполняется.
Цикл while - более простая аналогия цикла, подобная for. Использование той или иной версии цикла зависит от задачи и чувства прекрасного.

<?php
  $x = 5;
  while($x>0){
    print $x . ",";
    $x --;
  }

 foreach 
Специальная конструкция, приспособленная для обхода массивов. Имеет две формы синтаксиса.
сокращенная:
foreach($массив as $элемент){ тело цикла }
полная:
foreach($массив as $ключ => $элемент){ тело цикла }
массив - массив, по которому совершается обход.
ключ - ключ текущей ячейки массива.
элемент - значение текущей ячейки массива.

<?php
  $user = array("name" => "Vasya", "age" => 20, 'is_admin' => true);
  foreach($user as $key => $value){
    print $key . ' = ' . $value . '<br>';
  }

Аналогично совершается обход последовательного массива.

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

В PHP существует большая библиотека функций, практически, на все случаи жизни. В том числе и для массивов. Но логично будет рассмотреть их после изучения самих функций. Так что тема массивов пока не закрыта.

Комментариев нет:

Отправить комментарий