Языки программирования

Массивы

В PHP массив — настолько часто используемая структура, что вам придётся встречаться с ней очень и очень часто. Для быстрой и успешной работы необходимо понимать, как работают массивы и какие при этом используются приёмы.

В программировании термин «массив» означает набор элементов данных одного типа, причём доступ к элементам осуществляется по номеру элемента.

Переменная, представляющая массив в PHP, может служить как обычным массивом с цифровыми индексами, они носят название «Простые массивы», так и отображением (stroki), то есть, массивом со строковыми индексами. Такие массивы называются ассоциативными.

Ассоциативный массив — это объект, задающий набор «ключей» и соответствующих им «значений». Массив можно представить в виде таблицы из двух колонок, в которой одна колонка является «ключом», а другая колонка — «значением»:
Массив может быть создан языковой конструкцией array(). В качестве параметров она принимает любое количество разделенных запятыми пар key => value (ключ => значение).
array(
    key  => value,
    key2 => value2,
    key3 => value3,
    ...

)

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

Многомерный массив (массив массивов) предоставляет в распоряжение программиста более эффективные средства для хранения информации, требующей дополнительного структурирования. Создать многомерный массив несложно, просто добавьте дополнительную пару квадратных скобок, чтобы вывести массив в новое измерение:
$chessboard [1] [4] = "King"; // Двухмерный массив

$capitals["USA"] ["Ohio"] = "Columbus": // Двухмерный массив

$streets["USA"]["Ohio"]["Columbus"] = "Harrison"; // Трехмерный массив

Перебор элементов массива:

Число элементов в массиве не обязательно знать заранее — его можно вычислить при помощи функции count()
  <?php
  for ($i = 1; $i <= count($arr); $i++)
  {
    echo $arr[$i]." ";
  }
  ?>
Для вывода всех элементов массива на экран мы можем использовать функцию print_r, которая выведет все элементы массива вместе с их индексами.
<?php

$arr[0] = "PHP";
$arr[1] = "HTML";
$arr[2] = "CSS";

print_r($arr);
?> 
Отображение в браузере:
Array ( [0] => PHP [1] => HTML [2] => CSS )
Также в PHP присутствует специальный цикл для обработки массивов - цикл foreach. Он представлен для упрощения работы с массивами.

Синтаксис:
foreach (array as $value) statement
foreach (array as $key => $value) statement
Пример:
<?php
$arr[0] = "PHP";
$arr[1] = "HTML";
$arr[2] = "CSS";

foreach($arr as $value)

{
   echo $value, "<br>";
   
}

?>
Функция file(), которая читает файл и возвращает его содержимое в виде массива. Каждый элемент массива соответствует одной строке.
 <?php
  $arr = file("text.txt");
  for($i = 0; $i < count($arr); $i++)
  { 
     echo $arr[$i]."<br />";
  }
 ?>
Функция explode(), позволяет разбить строку на несколько фрагментов, каждый из которых помещается в отдельный элемент массива:
<?php
   $str = "654|mail@mail.ru|http://www.it-black.ru|login|password";
  $arr = explode("|",$str);
  for($i = 0; $i < count($arr); $i++)
  { 
     echo $arr[$i]."<br />";
  } 
?>
Выведит:
654
mail@mail.ru
https://www.it-black.ru
login
password
Существует и обратная функция — implode(), которая объединяет, элементы массива в строку, используя для этого заданный разделитель:
  <?php
  $arr[] = "654";
  $arr[] = "mail@mail.ru";
  $arr[] = "https://www.it-black.ru";
  $arr[] = "login";
  $arr[] = "password";
  
  $str = implode("##",$arr); 
  
  echo $str; //654##mail@mail.ru##http://www.it-black.ru##login##password
  ?>
Уничтожить весь массив сразу можно с помощью функции unset().
  <?php
  $arr = array(9, 8, 7, 6, 5, 4, 3, 2, 1, 0);
  unset($arr);
  if(isset($arr)) echo "Массив определён";
  else echo "Массив не определён"; 
  ?>

Суперглобальные массивы:

Эти массивы содержат всю информацию о состоянии сервера и среды выполнения скрипта. Массивы доступны в любом месте скрипта без дополнительных объявлений, т.е. не надо использовать ключевое слово global.
  • $GLOBALS - содержит все глобальные переменные программы.
  • $_GET, $_POST - содержат параметры запроса GET, POST.
  • В эти массивы помещаются данные, передаваемые скрипту извне (так называемый, пользовательский ввод). Пользователь может влиять только на эти два массива плюс массив файлов и cookie. И именно поэтому все элементы этих массивов должны тщательно проверяться на допустимые значения.
  • $_SESSION - содержит содержимое сессии текущего пользователя.
  • $_COOKIE - содержит набор Cookie, переданных с запросом HTTP.
  • В массив $_COOKIES автоматически помещаются все cookies, которые получены от браузера. Это массив, из которого в любое время можно узнать какие cookies установлены на стороне клиента.
  • Массив $_REQUEST объединяет три массива: $_POST, $_GET, $_COOKIES. Пользоваться массивом $_REQUEST очень удобно в случаях, когда нет разницы, каким методом был сделан запрос.
  • $_FILES - содержит описание файлов, загруженных по HTTP POST, закодированному как multipart/form-data.
  • $_SERVER - содержат соответственно данные, переданные веб-сервером (заголовки HTTP, информация о сервере, информация об удалённом клиенте, путь к файлу скрипта).
  • С помощью этого массива можно узнать практически всё о сервере, на котором исполняется скрипт. Например:
<?php
  echo 'параметры сервера:' . "<br />\n";

    echo "Операционная система: " .
		$_SERVER["OS"] . "<br />\n";
    echo "Web-сервер: " .
		$_SERVER["SERVER_SOFTWARE"] . "<br />\n";
    echo "Имя сервера: " .
		$_SERVER["SERVER_NAME"] . "<br />\n";
    echo "Адрес сервера: " .
		$_SERVER["SERVER_ADDR"] . "<br />\n";
    echo "Порт сервера: " .
		$_SERVER["SERVER_PORT"] . "<br />\n";
    echo "Адрес клиента: " .
		$_SERVER["REMOTE_ADDR"] . "<br />\n";
    echo "Путь к документам на сервере: " .
		$_SERVER["DOCUMENT_ROOT"] . "<br />\n";
    echo "Полный путь к текущему скрипту: " .
		$_SERVER["SCRIPT_FILENAME"] . "<br />\n";
    echo "Имя текущего скрипта: " .
		$_SERVER["PHP_SELF"] . "<br />\n";
  ?>
  • Пользоваться этим массивом нужно аккуратно, т.к. некоторые сервера имеют достаточно специфичные настройки или значения параметров. Иногда это приводит к неприятным ошибкам, которые очень сложно диагностировать и исправить.
  • $_ENV - содержит переменные окружения установленные для всех скриптов на сервере.

Суперглобальные массивы очень удобны в работе, но злоупортеблять ими не стоит, особенно массивом $_SESSION. Если переменной нужна только в локальной области видимости - не надо её делать глобальной. Слишком большое количество "лишних" переменных сильно снижает быстродействие и эффективность скрипта.

Немного практики для закрепления материала (сделайте задания самостоятельно и ответы напишите в комментариях):

1. Дан массив $a = array('Linux', 'Mac OS', 'Max', 'Alex', 'Dragons', 'Little');. Определите числа элементов в массиве с помощью функции count().

2. Создайте массив и отобразите его с помощью функции ptint_r.

3. Создайте текстовый файл (заполните его) и с помощью функции file(), возвратите содержимое в виде массива.
Самоучитель по PHP