5 Работа с массивами данных в PHP

Массив - это переменная, в которой хранится набор или последовательность значений. Хранящиеся в массиве значения называются элементами массива. Каждый элемент массива имеет связанный с ним индекс, называемый ключом, который используется для доступа к элементу.

Один массив может содержать много элементов, причем, каждый элемент массива может содержать единственное значение. Массив, который содержит другие массивы, называется многомерным массивом [5].

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

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

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

$Author[] = "Lev Tolstoy";
$Author[] = "Fedor Dostoevskiy";
$Author[] = "Anton Chehov";

первому элементу массива “$Author” присвоено значение “Lev Tolstoy”, второму элементу значение “Fedor Dostoevskiy”, а третьему элементу значение “Anton Chehov”.

При этом индекс массивов также можно указать явно. В ниже представленном коде

$Poets[0] = "Alexander Pushkin";
$Poets[1] = "Mihail Lermontov";
$Poets[2] = "Sergey Esenin";

нулевому элементу массива “$Poets” присвоено значение “Alexander Pushkin”, первому элементу значение “Mihail Lermontov”, а второму элементу значение “Sergey Esenin”.

При этом если, при объявлении элементов массива смешиваются переменные с явной индексацией и без индексации, то тому элементу, индекс которого не задан, в языке PHP присвоится первый доступный индекс, после самого большого использованного до сих пор индекса.

Например, если создать массив с элементами, индексы которых будут равны 10, 20, 30 и 40, а затем создать элемент, индекс которого явно не указан, то ему автоматически присвоится индекс 41.

Например, в представленном ниже коде

$Car[10] = "Mercedes";
$Car[20] = "Ford";
$Car[30] = "Toyota";
$Car[40] = "Opel";
$Car[] = "Nissan";
echo($Car[41]);

очередному элементу массива “$Car” со значением “Nissan” присвоилось значение 41. При этом по этому индексу можно обращаться к этому элементу массива.

Ниже представлен пример создания массива первым способом.

<HTML>
<HEAD>
<TITLE>Пример инициализации массива</TITLE>
</HEAD>
<BODY>
<?php
echo "<B>Элементы массива: </B>"."<BR>";
$technik[10] = "Computer";
$technik[20] = "Printer";
$technik[30] = "Mouse";
$technik[40] = "Scaner";
$technik[50] = "Monitor";
echo $technik[10]."<br>";
echo $technik[20]."<br>";
echo $technik[30]."<br>";
echo $technik[40]."<br>";
echo $technik[50]."<br>";
?>
</BODY>
</HTML>

Результат работы данного кода представлен на рисунке 5.1.


Рисунок 5.1 – Вывод на экран наименований оргтехники

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

Второй способ создания массива заключается в создании переменной и присвоении ей значений с использованием конструкции array.

Синтаксис:

array array([mixed ...]).

Функция array возвращает созданный массив. Скобки указывают на то, что значения необходимо сохранять в массиве.

Например, в представленном ниже коде

$City = array("Moscow", "Paris","London","New York", "Tokio");

был создан массив “$City”, состоящий из пяти элементов. В качестве элементов массива использовались названия различных мегаполисов.

Здесь для явного указания индексов применяется оператор “=>”. При этом пары “индекс”=>“значение” разделяются запятыми.

Например, в ниже представленном коде

$Сity = array (5 =>"Moscow", "Paris", "London", "New York", "Tokio");
echo($City[5]); // вывод "Moscow"
echo($City[6]); // вывод "Paris"
echo($City[7]); // вывод "London"
echo($City[8]); // вывод "New York"
echo($City[9]); // вывод "Tokio"
?>

нумерация элементов массива начнется с пятого номера и элементу массива, к примеру, “Paris” присвоится шестой номер.

Ниже представлен пример создания массива с помощью функции array.

<HTML>
<HEAD>
<TITLE>Пример использования функции array</TITLE>
</HEAD>
<BODY>
<?php
$country = array("Russia","Italy","England","Japan","Turkey");
echo "<B>Элементы массива: </B>"."<BR>";
echo $country [0]."<br>";
echo $country [1]."<br>";
echo $country [2]."<br>";
echo $country [3]."<br>";
echo $country [4]."<br>";
?>
</BODY>

Результат работы данного кода представлен на рисунке 5.2.


Рисунок 5.2 – Вывод на экран названий стран

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

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

Например, в представленном ниже коде демонстрируется работа с ассоциативным массивом “$Color”.

$Color = array("R" => "Rose", "G" => "Gerber", "L" => "Liliya");
echo($Color["R"]); // вывод "Rose"
echo($Color["G"]); // вывод "Gerber"
echo($Color["L"]); // вывод "Liliya"

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

Ниже представлен пример работы с ассоциативными массивами.

<HTML>
<HEAD>
<TITLE>Пример использования ассоциативных массивов
</TITLE>
</HEAD>
<BODY>
<?php
$name = array("М" => "Марина", "Н" => "Наталья", "Е" => "Екатерина", "И" => "Ирина", "Ю" => "Юлия");
echo "<B>Элементы массива: </B>"."<BR>";
echo($name["М"])."<BR>";
echo($name["Н"])."<BR>";
echo($name["Е"])."<BR>";
echo($name["И"])."<BR>";
echo($name["Ю"])."<BR>";
?>
</BODY>
</HTML>

Реализация данного кода представлена на рисунке 5.3.


Рисунок 5.3 – Вывод на экран имен

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

Язык PHP также поддерживает работу с многомерными массивами. Для инициализации многомерных массивов используются вложенные конструкции array. Так если при создании массива были указаны два элемента с одинаковыми индексами, то последний элемент заменяет первый.

Например, в представленном ниже коде

$Year =array ("season " => array("a"=>"Зима", "b"=>"Весна", "c"=>"Лето", "d"=>"Осень");

создается двумерный массив, содержащий элементы “Зима”, “Весна”, “Лето”, “Осень”.

При этом данная запись эквивалентна записи:

$Year ["season"]["a"]="Зима", "Весна", "Лето", "Осень ";
"number" => array("a", "b", "c", "d"),

При этом обход многомерных массивов достигается при помощи вложенных циклов.

Ниже представлен пример работы с многомерными массивами.

<HTML>
<HEAD>
<TITLE>Пример использования многомерных массивов</TITLE>
</HEAD>
<BODY>
<?php
$ship = array( "Passenger ship" => array("Yacht","Liner","Ferry"),
"War ship" => array("Battle-wagon","Submarine","Cruiser"),
"Freight ship" => array("Tank vessel","Dry-cargo ship","Container cargo ship"));
foreach($ship as $key => $type) { echo("<h2>$key</h2>\n"."<ul>\n");
foreach($type as $ship) { echo("\t<li>$ship</li>\n"); }} echo("</ul>\n");
?>
</BODY>
</HTML>

Реализация данного кода представлена на рисунке 5.4.


Рисунок 5.4 – Вывод наименований морских судов

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

Первый массив содержит информацию о пассажирских кораблях (“Passenger ship”). К ним относятся яхта (“Yacht”), лайнер (“Liner”) и паром (“Ferry”).

Второй массив содержит информацию о военных кораблях (“War ship”). К ним относятся линкор (“Battle-wagon”), подводная лодка (“Submarine”) и круизер (“Cruiser”).

Третий массив содержит информацию о грузовых суднах (“Freight ship”). К ним относятся судно резервуара (“Tank vessel”), суховое грузовое судно (“Dry-cargo ship”), контейнерное грузовое судно (“Container cargo ship”).

5.2 Итерации в массивах

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

Например, ниже представлен массив “$Month”, который включает в себя 12 элементов. Эти элементы являются названиями месяцев года.

$Month = array ("Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь");,

При этом при обработке таких массивов можно использовать все стандартные функции работы с массивами.

Следует отметить, что если создан массив с большим количеством элементов, то нежелательно возвращаться назад и по отдельности извлекать каждый элементы массива. Для этого потребуется большая дополнительная работа. Облегчить эту работу позволяют циклы. Например, чтобы на Web-странице отобразить названия всех месяцев года, можно просто использовать цикл for.

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

HTML-код формы для вывода информации об областных центрах представлен ниже.

<HTML>
<HEAD>
<TITLE>Области Российской федерации</TITLE>
</HEAD>
<BODY>
<?php
if (isset($_POST['posted']))
{
$centers_of_subjects = array ( "Благовещенск", "Архангельск", "Астрахань", "Белгород", "Брянск", "Владимир", "Волгоград", "Вологда", "Воронеж", "Иваново", "Иркутск", "Калининград", "Калуга", "Кемерово", "Киров", "Кострома", "Курган", "Курск", "Санкт-Петербург", "Липецк", "Магадан", "Москва", "Мурманск", "Нижний Новгород", "Великий Новгород", "Новосибирск", "Омск", "Оренбург", "Орёл", "Пенза", "Псков", "Ростов-на-Дону", "Рязань", "Самара", "Саратов", "Южно-Сахалинск", "Екатеринбург", "Смоленск", "Тамбов", "Тверь", "Томск", "Тула", "Тюмень", "Ульяновск", "Челябинск", "Ярославль");
for($counter=0; $counter<46; $counter++)
{
if($_POST['hiddenstate'][$counter]==$_POST['state'])
{
$str=$_POST[state];
$str = str_replace("ая","ой",$str);
$str = str_replace("ть","ти",$str);
echo "<B>Областной центр $str - город $centers_of_subjects[$counter]. </B><HR>";
}
}
}
?>
<form action="example.php" method="POST">
<input type="hidden" name="posted" value="true">
Выберите область, название центра которой Вы хотели бы узнать
<select name="state">
<?php
$subjects_of_RU = array (1 => "Амурская", "Архангельская", "Астраханская", "Белгородская", "Брянская", "Владимирская", "Волгоградская", "Вологодская", "Воронежская", "Ивановская", "Иркутская", "Калининградская", "Калужская", "Кемеровская", "Кировская", "Костромская", "Курганская", "Курская", "Ленинградская", "Липецкая", "Магаданская", "Московская", "Мурманская", "Нижегородская", "Новгородская", "Новосибирская", "Омская", "Оренбургская", "Орловская", "Пензенская", "Псковская", "Ростовская", "Рязанская", "Самарская", "Саратовская", "Сахалинская", "Свердловская", "Смоленская", "Тамбовская", "Тверская", "Томская", "Тульская", "Тюменская", "Ульяновская", "Челябинская", "Ярославская");
for($counter = 1; $counter < 47; $counter++)
{
echo "<option>$subjects_of_RU[$counter] область</option>";
}
echo "</select><br><br>";
for ($counter = 1; $counter < 47; $counter++)
{
echo "<input type='hidden' name='hiddenstate[]' value='$subjects_of_RU[$counter] область'>";
}
?>
<input type="submit" value="Найти центр области">
</FORM>
</BODY>
</HTML>

Реализация данного кода представлена на рисунке 5.5.


Рисунок 5.5 – Поиск областного центра

Таким образом, как видно на рисунке 5.5, в данном примере, при загрузке Web-страницы на экране появляется список, который предоставляет пользователю выбрать область, для которой необходимо найти ее центр.

Названия регионов помещены в массив, начиная с нулевого индекса. Создан цикл для 46 итераций, помещающий название каждого региона в элемент выпадающего списка. Также был создан второй цикл для создания массива, содержащего 46 названий центров областей. Массивы были созданы так, чтобы гарантировать, что индекс центра определенной области в первом массиве соответствует индексу области во втором массиве, то есть данные в двух массивах согласованы по индексу.

После выбора соответствующего региона, в программе применяется цикл, который имеет вложенный условный оператор, проверяющий совпадение текущей области с областью, выбранной пользователем. Если они совпадают, то на Web-странице отображается содержимое соответствующего элемента. Если значения не совпадают, то цикл for продолжается. Использование выпадающего списка обеспечивает конечное число вариантов.

В данном случае пользователь выбрал область “Оренбургская область”. В результате на экране появилось сообщение, что “Областной центр Оренбургской области - город Оренбург”.

Следует отметить, что также существуют другие функции для работы с массивами, которые представлены ниже.

5.3 Функции работы с массивами

5.3.1 Сортировка массивов

5.3.1.1 Функция sort

Функция sort осуществляет сортировку массива по возрастанию.

Синтаксис:

void sort(array $arr [, int $sort_flags])

где $arr – исходный массив,

$sort_flags – флаг сортировки.

Функция sort предназначена для сортировки элементов массива “$arr” по возрастанию. После упорядочивания последовательность ключей превращается в 0, 1, 2, ..., а значения нужным образом перераспределяются. При этом связи между параметрами “ключ=>значение” не сохраняются.

Необязательный аргумент “sort_flags” указывает, как именно должны сортироваться элементы (задает флаг сортировки). Возможными значениями этого аргумента являются следующие:

Необходимо отметить, что эта функция предназначена для сортировки списков. Под списком понимается массив, ключи которого начинаются с нуля и не имеют пропусков. Функция sort воспринимает любой массив как список.

Ниже представлен пример использования функции sort.

<HTML>
<HEAD>
<TITLE>Пример использования функции sort</TITLE>
</HEAD>
<BODY>
<?php
$animal=array("Рысь","Тигр","Медведь","Волк","Лиса");
sort ($animal);
echo "<B>Массив, отсортированный по возрастанию:</B><BR>";
for ($i=0; $i<count($animal); $i++)
echo "$i: $animal[$i]<BR>";
// вывод на экран массива отсортированного по возрастанию
?>
</BODY>
</HTML>

Реализация данного кода представлена на рисунке 5.6.


Рисунок 5.6 – Сортировка названий животных по возрастанию

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

5.3.1.2 Функция rsort

Функция rsort осуществляет сортировку массива по убыванию.

Синтаксис:

void rsort(array $arr [, int $sort_flags]),

где $arr – исходный массив,

$sort_flags – флаг сортировки.

Функция rsort сортирует в обратном порядке элементы массива “$arr”, переданного в ее параметрах. Данная функция аналогична функции sort, за исключением того, что сортирует элементы массива по убыванию.

Значение флага сортировки “sort_flags” указывает на то, как именно должны сортироваться элементы массива. Значения флагов сортировки “sort_flags” приведены в описании функции sort.

Ниже представлен пример использования функции rsort.

<HTML>
<HEAD>
<TITLE>Пример работы функции rsort</TITLE>
</HEAD>
<BODY>
<?php
$pet=array("Лошадь","Корова","Собака","Кролик","Кошка");
rsort($pet);
echo "<B>Массив, отсортированный по убыванию:</B><BR> ";
for($i=0; $i<count($pet); $i++)
echo "$i: $pet[$i]<BR>";
// вывод на экран массива, отсортированного по убыванию
?>
</BODY>
</HTML>

Реализация данного примера представлена на рисунке 5.7.


Рисунок 5.7 – Сортировка названий животных по убыванию

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

5.3.1.3 Функция asort

Функция asort осуществляет сортировку ассоциативного массива по возрастанию.

Синтаксис:

void asort(array $arr [, int $sort_flags]),

где $arr – исходный массив,

$sort_flags – флаг сортировки.

Функция asort сортирует массив “$arr”, указанный в ее параметрах так, чтобы его значения шли в алфавитном (если это строки) или возрастающем (если это числа) порядке.

Важное отличие функции asort от функции sort состоит в том, что при применении функции asort сохраняются связи между ключами и соответствующими им значениями, чего нет при использовании функции sort. Там эти связи попросту разрываются. То есть, при использовании функции asort некоторые пары “ключ=>значение” просто “всплывают” наверх, а некоторые - наоборот, “опускаются” вниз.

Функция asort полезна, в основном, при сортировке ассоциативных массивов, когда важно сохранить отношение “ключ => значение”.

Необязательный аргумент “sort_flags” указывает, как именно должны сортироваться элементы (задает флаг сортировки). Возможными значениями этого аргумента являются следующие:

Ниже представлен пример работы функции asort.

<HTML>
<HEAD>
<TITLE>Пример использования функции asort</TITLE>
</HEAD>
<BODY>
<?php
$writer = array ("a"=>"Пушкин", "b"=>"Есенин",
"c"=>"Лермонтов", "d"=>"Гоголь", "e"=>"Толстой");
asort($writer);
echo "<B> Ассоциативный массив, отсортированный по возрастанию: </B><BR>";
foreach($writer as $k=>$v) echo "$k=>$v<BR>";
// вывод на экран ключа и элемента ассоциативного массива, отсортированного по возрастанию
?>
</BODY>
</HTML>

Результат выполнения данного скрипта представлен на рисунке 5.8.


Рисунок 5.8 – Сортировка фамилий писателей возрастанию

Таким образом, как видно из рисунке 5.8, в данном примере c помощью функции asort была осуществлена сортировка элементов исходного ассоциативного массива вместе с ключами по возрастанию. В качестве элементов массива использовались фамилии русских писателей.

5.3.1.4 Функция arsort

Функция arsort осуществляет сортировку ассоциативного массива по убыванию.

Синтаксис:

void arsort(array $arr [, int $sort_flags]),

где $arr – исходный массив,

$sort_flags – флаг сортировки.

Функция arsort сортирует массив “$arr” в обратном порядке таким образом, что сохраняются отношения между парами “ключ=>значение”. Функция arsort аналогична функции asort, только упорядочивает элементы по убыванию.

Значение флага сортировки “sort_flags” указывает на то, как именно должны сортироваться элементы массива. Значения флагов сортировки “sort_flags” приведены в описании функции asort.

Ниже представлен пример работы функции arsort.

<HTML>
<HEAD>
<TITLE>Пример использования функции arsort</TITLE>
</HEAD>
<BODY>
<?php
$berry =array("a"=>"Raspberry", "b"=>"Strawberry",
"c"=>"Blackberry", "d"=>"Blueberry", "e"=>"Bilberry");
arsort($berry);
echo "<B>Ассоциативный массив, отсортированный по убыванию: </B><BR>";
foreach($berry as $k=>$v) echo "$k=>$v<BR>";
// вывод на экран ключа и элемента ассоциативного массива, отсортированного по убыванию
?>
</BODY>
</HTML>

Реализация данного кода представлена на рисунке 5.9.


Рисунок 5.9 - Сортировка названий ягод по убыванию

Таким образом, как видно на рисунке 5.9, в данном примере c помощью функции arsort была осуществлена сортировка элементов массива вместе с ключами по убыванию, после чего результаты были выведены на экран. В качестве элементов массива использовались названия различных ягод.

5.3.1.5 Функция array_reverse

Функция array_reverse осуществляет расстановку элементов массива в обратном порядке.

Синтаксис:

array array_reverse(array $arr [, bool preserve_keys]),,

где $arr – исходный массив,

preserve_keys - параметр, указывающий на перестановку ключей.

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

Ниже представлен пример использования функции array_reverse.

<HTML>
<HEAD>
<TITLE>Пример использования функции array_reverse</TITLE>
</HEAD>
<BODY>
<?php
$mark =array("отлично","хорошо","удовлетворительно","неудовлетворительно");
echo "<b>Исходный массив:</b><br>";
foreach($mark as $elem) echo "$elem "; // вывод на экран исходного массива
$mark = array_reverse($mark);
echo "<br><br><b>Массив в обратном порядке:</b><br>";
foreach($mark as $elem) echo "$elem "; // вывод на экран элементов массива в обратном порядке
?>
</BODY>
</HTML>

Реализация данного кода представлена на рисунке 5.10.


Рисунок 5.10 – Вывод оценок в обратном порядке

Таким образом, как видно на рисунке 5.10, в данном примере c помощью функции array_reverse элементы исходного массива были переставлены в обратном порядке, после чего выведены на экран. В качестве элементов массива использовались оценки обучающихся. .

5.3.1.6 Функция shuffle

Функция shuffle осуществляет перемешивание элементов массива.

Синтаксис:

void shuffle (array $arr),

где $arr – исходный массив.

Функция shuffle случайным образом переставляет элементы массива “$arr”, заданного в ее параметре.

Например, в представленном ниже коде

$number = array(100, 200, 300, 400, 500);
shuffle($number);
foreach($number as $v) echo "$v ";

элементы массива $number выведутся на экран в случайном порядке: 400, 100, 500, 300, 200.

5.3.1.7 Функция natsort

Функция natsort выполняет естественную сортировку массива.

Синтаксис:

void natsort(array $arr),

где $arr – исходный массив.

Функция natsort сортирует массив “$arr” в естественном для человека порядке. При этом под естественной сортировкой массива понимается сортировка, когда элементы массива располагаются в порядке, понятном для человека, а не машины. Ниже представлен пример работы функции natsort.

Ниже представлен пример работы функции natsort.

<HTML>
<HEAD>
<TITLE>Пример использования функции natsort</TITLE>
</HEAD>
<BODY>
<?php
$files1 = array("21.html", "12.html", "11.html", "10.html", "2.html", "1.html");
$files2 = $files1;
sort($files1);
echo "<B>Стандартная сортировка:</B><BR>";
print_r($files1); // вывод на экран исходного массива
natsort($files2); // сортировка массива в естественном порядке
echo "<BR><BR><B>Естественная сортировка:</B><BR>";
print_r($files2); // вывод на экран полученного массива
?>
</BODY>
</HTML>

Результат работы представлен на рисунке 5.11.


Рисунок 5.11 – Естественная сортировка названия файлов

Таким образом, как видно на рисунке 5.11, в данном примере, в результате естественной сортировки, c помощью функции natsort, все элементы исходного массива были отсортированы в привычной для человека последовательности. В качестве элементов исходного массива использовались названия файлов HTML-страниц.

5.3.1.8 Функция ksort

Функция ksort осуществляет сортировку массива по возрастанию индексов (ключей).

Синтаксис:

int ksort(array $arr [, int sort_flags]),

где $arr – исходный массив,

$sort_flags – флаг сортировки.

Функция ksort сортирует массив “$arr” по ключам элементов массива в порядке их возрастания, сохраняя отношения между ключами и значениями.

Функция ksort полезна, в основном, для работы с ассоциативными массивами. Функция возвращает true в случае успешного завершения или false в случае возникновения ошибки.

Необязательный аргумент “sort_flags” указывает, как именно должны сортироваться элементы (задает флаги сортировки). Возможными значениями этого аргумента являются следующие:

Функция практически идентична функции asort, с тем различием, что сортировка осуществляется не по значениям, а по ключам.

Ниже представлен пример работы функции ksort.

<HTML>
<HEAD>
<TITLE>Пример использования функции arsort</TITLE>
</HEAD>
<BODY>
<?php
$chin = array ("a"=> "Сержант", "b" => "Майор", "c"=> "Подполковник", "d" => "Полковник", "e" =>"Генерал");
ksort($chin);
echo"<B>Массив, отсортированный по возрастанию ключей:</B><BR>";
foreach($chin as $key => $val)
{ echo ("$key => $val
"); }
//вывод элементов массива по ключам в порядке их возрастания
?>
</BODY>
</HTML>

Реализация данного кода представлена на рисунке 5.12.


Рисунок 5.12 – Сортировка военных званий по возрастанию ключей

Таким образом, как видно на рисунке 5.12, в данном примере c помощью функции ksort осуществлялась сортировка массива, элементами которого являются наименования званий офицеров. В результате, на экран вывелись элементы массива, отсортированные по возрастанию ключей. При этом при сортировке массива учитывались индексы элементов, в то время как содержание элементов не учитывалось.

5.3.1.9 Функция krsort

Функция ksort осуществляет сортировку массива по убыванию индексов (ключей).

Синтаксис:

int krsort(array arr [, int sort_flags]),

где $arr – исходный массив,

$sort_flags – флаг сортировки.

Функция krsort сортирует массив “$arr” по ключам элементов в порядке их по убывания. При этом при работе функции krsort сохраняются отношения между ключами и значениями.

Функция ksort полезна, в основном, для работы с ассоциативными массивами и возвращает true в случае успешного завершения или false в случае возникновения ошибки.

Значение флага сортировки “sort_flags” указывает на то, как именно должны сортироваться элементы массива. Значения флагов сортировки “sort_flags” приведены в описании функции ksort.

Ниже представлен пример работы функции krsort.

<HTML>
<HEAD>
<TITLE>Пример использования функции arsort</TITLE>
</HEAD>
<BODY>
<?php
$transport = array("a" =>"Самолет","b" => "Поезд", "c" => "Корабль","d" => "Автомобиль","e" => "Вертолет");
// исходный массив
ksort($transport);
// сортировка массива по убыванию ключей
echo"<B>Массив, отсортированный по убыванию ключей:<B><BR>";
foreach($transport as $key => $val)
{ echo (" $key => $val <br> "); }
//вывод элементов массива по ключам в порядке их убывания
?>
</BODY>
</HTML>

Реализация данного примера представлена на рисунке 5.13.


Рисунок 5.13 - Сортировка транспортных средств по убывания ключей

Таким образом, как видно на рисунке 5.13, в данном примере c помощью функции krsort осуществлялась сортировка массива по индексам элементов в порядке их убывания. В результате на экран вывелись элементы массива, которыми являются названия транспортных средств.

5.3.2 Функции для работы с курсором массива

5.4.2.1 Функция reset

Функция reset производит сброс курсора на начало массива.

Синтаксис:

mixed reset(array $arr),

где $arr – исходный массив.

Функция reset устанавливает внутренний курсор массива arr на его начало и возвращает значение начального элемента.

Многие функции, работающие с массивами, начинают обработку массива с того места, где находится указатель. Функция reset сбрасывает внутренний указатель массива, тем самым, возвращаясь к первому элементу, с которого последует дальнейшая обработка массива.

5.4.2.2 Функция end

Функция end производит перенос курсора в конец массива.

Синтаксис:

mixed end(array $arr),

где $arr – исходный массив.

Функция end устанавливает внутренний курсор массива arr на последний элемент и возвращает значение последнего элемента. Функция выполняет действие, обратное функции reset, то есть переносит курсор в конец массива.

Ниже представлен пример работы функции end.

<HTML>
<HEAD>
<TITLE>Пример использования функции end</TITLE>
</HEAD>
<BODY>
<?php
$pev=array ("Michael Jackson", "Britney Spears", "Jennifer Lopez", "Jastine Timberlake", "Madonna");
echo "<B>Исходный массив:</B><BR>";
foreach($pev as $v) echo "$v<br>";
echo "<BR><BR><B>Последний элемент массива:</B><BR>".end($pev);
// вывод на экран последнего элемента массива
?>
</BODY>
</HTML>

Реализация данного примера представлена на рисунке 5.14.


Рисунок 5.14 – Определение последнего элемента массива певцов

Таким образом, как видно на рисунке 5.14, в данном примере c помощью функции end курсор массива был установлен на последний элемент массива со значением “Madonna”, который был выведен на экран. В качестве элементов использовались фамилии певцов.

5.4.2.3 Функция current

Функция current определяет текущий элемент массива.

Синтаксис:

mixed current(array $arr),

где $arr – исходный массив.

Функция current возвращает значение элемента массива “$arr”, на котором в данный момент находится курсор массива, при этом, не сдвигая курсор. Если курсор оказался за пределами массива, функция возвратит false.

Другими словами функция current возвращает значение элемента массива, на который указывает его внутренний указатель.

Ниже представлен пример работы функции current.

<HTML>
<HEAD>
<TITLE>Пример использования функции current</TITLE>
</HEAD>
<BODY>
<?php
$actor = array("Brad Pitt","Angelina Jolie","Tom Cruise","Demi Moore","Bruce Willis");
$pr = current($actor);
echo "<B>Текущий элемент массива:</B>".$pr;
// вывод на экран текущего элемента массива
?>
</BODY>
</HTML>

Реализация данного кода представлена на рисунке 5.15.


Рисунок 5.15 – Определение текущего элемента массива актеров

Таким образом, как видно на рисунке 5.15, в данном примере c помощью функции current был осуществлен поиск текущего элемента массива, на котором находился курсор массива. Текущим элементом массива является элемент со значением “Brad Pitt”, который и был выведен на экран. В качестве элементов массива использовались имена и фамилии различных актеров.

5.3.2.4 Функция next

Функция next производит перенос курсора вперед на одну позицию.

Синтаксис:

mixed next(array $arr),

где $arr – исходный массив.

Функция next перемещает курсор массива “$arr”, переданного в ее параметре, на следующий элемент, при этом, возвращая значение элемента, на котором находился курсор до перемещения. Если элементов в массиве больше не осталось, функция возвращает false.

В отличие от функции current функция next перед тем, как возвратить значение элемента массива, передвигает его внутренний указатель на одну позицию вперед. Другими словами, она возвращает следующий элемент массива и сдвигает его внутренний указатель на одну позицию.

5.3.2.5 Функция prev

Функция prev производит перенос курсора на один элемент назад.

Синтаксис:

mixed prev(array $arr),

где $arr – исходный массив.

Функция prev возвращает значение элемента массива “$arr”, находящегося на позиции, предыдущей по отношению к позиции, в которой находится его внутренний указатель. Функция возвращает false, если достигнут конец массива.

5.3.2.6 Функция key

Функция key возвращает индекс текущего элемента массива.

Синтаксис:

mixed key(array $arr),

где $arr – исходный массив.

Функция key определяет индекс текущего элемента массива “$arr”, заданного в ее параметре.

Ниже представлен пример работы функции key.

<HTML>
<HEAD>
<TITLE>Пример использования функции key</TITLE>
</HEAD>
<BODY>
<?php
$town = array("Оренбург", "Екатеринбург", "Санкт-Петербург", "Самара", "Москва");
$pr = key($town);
echo "<B>Индекс текущего элемента массива: </B>".$pr;
// вывод ключа текущего элемента массива
?>
</BODY>
</HTML>

Реализация данного кода представлена на рисунке 5.16.


Рисунок 5.16 – Определение индекса текущего элемента массива городов

Таким образом, как видно на рисунке 5.16, в данном примере c помощью функции key был определен индекс текущего элемента массива. В данном случае текущий элемент содержит название города “Оренбург” и его индекс оказался равен нулю. Это значение индекса было выведено на экран. В качестве элементов исходного массива использовались названия городов.

5.3.2.7 Функция each

Функция each возвращает текущую пару “ключ=>значение” из массива и смещает его указатель.

Синтаксис:

array each(array $arr),

где $arr – исходный массив.

Функция each возвращает в массиве пару “индекс=>значение” текущего элемента массива “$arr”, на который указывает внутренний курсор, и сдвигает курсор массива на следующий элемент.

Возващаемый массив имеет четыре элемента:

[0] => индекс
[1] => "значение"
[key] => индекс
[value] => "значение"

При этом элементы “0” и “key” содержат ключ элемента массива, а элементы “1” и “value” содержат его значение.

Функция возвращает false, если курсор достиг конца массива.

Ниже представлен пример работы функции each.

<HTML>
<HEAD>
<TITLE>Пример использования функции each</TITLE>
</HEAD>
<BODY>
<?php
$name = array("Сергей", "Василий", "Иван", "Алексей", "Дмитрий");
// исходный массив, состоящий из пяти элементов
$each_name = each($name);
print_r($each_name);
echo("<br>");
// вывод на экран очередного элемента массива, то есть первого
$each_name = each($name);
// вывод на экран первого элемента массива
print_r($each_name);
echo("<br>");
// вывод на экран очередного элемента массива, то есть второго
$each_name = each($name);
print_r($each_name);
echo("<br>");
// вывод на экран очередного элемента массива, то есть третьего
$each_name = each($name);
print_r($each_name);
echo("<br>");
// вывод на экран очередного элемента массива, то есть четвертого
$each_name = each($name);
print_r($each_name);
// вывод на экран очередного элемента массива, то есть пятого
?>
</BODY>
</HTML>

Реализация данного кода представлена на рисунке 5.17.


Рисунок 5.17 – Получение элементов массива имен

Таким образом, как видно на рисунке 5.17, в данном примере создается новая переменная, которой присваивается значение функции each от исходного массива. В эту переменную заносится очередной элемент массива, который включает значение элемента и его индекс. В данном примере у первого элемента массива значение равно “Сегрей”, индекс равен “0”, у второго элемента значение равно “Василий”, индекс равен “1”, у третьего элемента значение равно “Иван”, индекс равен “2”, у четвертого элемента значение равно “Алексей”, индекс равен “3”, у пятого элемента значение равно “Дмитрий”, индекс равен “4”.

5.3.3 Функции для работы с ключами и значениями массивов

5.3.3.1 Функция array_keys

Функция array_keys возвращает список из ключей массива.

Синтаксис:

list array_keys(array $arr),

где $arr – исходный массив.

Функция array_keys возвращает список, содержащий все ключи массива “$arr”.

Например, в представленном ниже коде

$arr = array("0" => Фиалки, "1" => "Ромашки", "2" => "Тюльпаны", "3" => "Ландыши", "4" => "Сирень");
array_keys($arr);

функция array_keys возвратит 0, 1, 2, 3, 4.

5.3.3.2 Функция array_flip

Функция array_flip меняет индексы и значения элементов массива.

Синтаксис:

array array_flip(array $arr),

где $arr – исходный массив.

Функция array_flip меняет местами в массиве “$arr”, заданном в ее параметре, значения элементов и ключи, то есть ключи становятся значениями, а значения становятся ключами.

При этом значения элементов массива должны быть корректными ключами, то есть они должны иметь тип integer или string. Функция array_flip возвращает false, если обработка массива вызвала ошибку.

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

Например, в представленном ниже коде.

$Alfavit = array("a"=>"aaa", "b"=>"aaa", "c"=>"ccc");
$ABC = array_flip($Alfavit);

массиву “$ABC” присваивается значение исходного массива “$Alfavit”, в котором значения и индексы поменялись местами.

$ABC = array ("aaa"=>"а", "bbb"=>"b", "ccc"=>"c");

Ниже представлен пример работы функции array_flip.

<HTML>
<HEAD>
<TITLE>Пример использования функции array_flip</TITLE>
</HEAD>
<BODY>
<?php
$family = array ("А"=>"Сидоров", "Б"=>"Петров", "В"=>"Иванов", "Г"=>"Григорьев", "Д"=>"Давыдов");
echo "<b>Исходный массив:</b><br>";
print_r($family);
// вывод на экран исходного массива
$famy = array_flip($family);
// перемена мест индексов и значений массива
echo "<BR><BR><B>Массив, полученный в результате замены индексов и значений элементов:</B><BR>";
print_r($famy);
//вывод на экран массива с замененными местами индексов и значений элементов
?>
</BODY>
</HTML>

Реализация данного кода представлена на рисунке 5.18.


Рисунок 5.18 – Замена индексов и значений элементов массива фамилий

Таким образом, как видно на рисунке 5.18, в данном примере с помощью функции array_flip индексы и значения элементов исходного массива поменялись местами. В результате полученный массив был выведен на экран, элементы и ключи которого вывелись в обратном порядке.

5.4.3.3 Функция array_values

Функция array_values осуществляет удаление ассоциативных индексов массива.

Синтаксис:

list array_values(array $arr),

где $arr – исходный массив.

Функция array_values возвращает список всех значений в ассоциативном массиве arr, т.е. превращает ассоциативный массив в простой.

Например, в представленном ниже коде

$Part_day = array("У"=>"Утро", "Д" =>"День", "В" =>"Вечер", "Н"=> "Ночь");
array_values ($Part_day);

в результате работы функции array_values получен массив: ("Утро", "День", "Вечер", "Ночь").

5.4.3.4 Функция array_count_values

Функция array_count_values подсчитывает частоту появления значений в массиве.

Синтаксис:

array array_count_values(array $arr),

где $arr – исходный массив.

Функция array_count_values подсчитывает, сколько раз каждое значение элемента встречается в массиве “$arr”, переданного в ее параметре. Функция возвращает ассоциативный массив с ключами, включающий элементы массива и количество повторов этих элементов. Другими словами, функция подсчитывает частоту появления значений в массиве “$arr”.

Ниже представлен пример работы функции array_count_values.

<HTML>
<HEAD>
<TITLE> Пример использования функции array_count_values</TITLE>
</HEAD>
<BODY>
<?php
$ekzotik = array ("А" => "Апельсин", "Б" => "Манго", "В" =>
"Ананас", "Г" => "Манго", "Д" => "Маракуйя");
$chast = array_count_values($ekzotik); // массив учета повторений
echo "<B>Частота повторения элементов в массиве:</B><BR>";
while(list($key,$val)=each($chast)) // вывод частоты повторений
{ echo "Элемент $key: $val<br>"; }
?>
</BODY>
</HTML>

Реализация данного кода представлена на рисунке 5.19.


Рисунок 5.19 – Определение частоты встречаемости названий фруктов

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

5.3.3.5 Функция sizeof

Функция sizeof возвращает число элементов массива.

Синтаксис:

int sizeof(array $arr),

где $arr – исходный массив.

Функция sizeof возвращает количество элементов в массиве “$arr”, заданного в ее параметре.

Ниже представлен пример работы функции sizeof.

<HTML>
<HEAD>
<TITLE> Пример использования функции sizeof </TITLE>
</HEAD>
<BODY>
<?php
$tehnika = array ("Телевизор", "MP3-плейер", "Фотоаппарат","DVD-плейер", "Видеокамера");
$result = sizeof($tehnika);
echo "<B>Массив содержит:</B> $result элементов";
?>
</BODY>
</HTML>

Реализация данного кода представлена на рисунке 5.20.


Рисунок 5.20 – Определение размера массива музыкальной техники

Таким образом, как видно на рисунке 5.20, в данном примере с помощью функции sizeof осуществлялось определение числа элементов массива, которое оказалось равно пяти. При этом в качестве элементов массива использовались названия ауди- и видеотехники.

5.3.3.6 Функция array_sum

Функция array_sum возвращает сумму всех элементов массива.

Синтаксис:

mixed array_sum(array $arr),

где $arr – исходный массив.

Функция array_sum возвращает сумму всех числовых элементов массива. От типа значений в массиве зависит тип возвращаемого числа.

Ниже представлен пример работы функции array_sum.

<HTML>
<HEAD>
<TITLE>Пример использования функции array_sum</TITLE>
</HEAD>
<BODY>
<?php
$arr = array(2,4,6,7);
echo "Сумма элементов ";
foreach($arr as $elem) echo "$elem "; // вывод элементов на экран
echo "= ".array_sum($arr);// вывод суммы элементов массива

?>
</BODY>
</HTML>

Реализация данного кода представлена на рисунке 5.21.


Рисунок 5.21 – Подсчет суммы элементов массива

5.3.4 Работа с несколькими массивами

5.3.4.1 Функция array_diff

Функция array_diff осуществляет определение исключительного пересечения массивов.

Синтаксис:

array array_diff(array $arr1, array $arr2 [, array ...]),

где $arr1 – первый массив,

$arr2 – второй массив.

Функция array_diff возвращает массив, состоящий из значений массива “$arr1”, которые отсутствуют в любом другом массиве, перечисленном в последующих аргументах. При этом ключи массивов сохраняются.

Например, в представленном ниже коде

$arr1 = array("a" => "зелёный", "красный", "голубой");
$arr2 = array("b" => " зелёный", "жёлтый", " красный");
$result = array_diff($arr1, $arr2);

в результате работы функции array_diff был получен массив, содержащий значение “голубой”, которого нет в других массивах:

$result = array("голубой");

5.3.4.2 Функция array_merge

Функция array_merge осуществляет слияние массивов.

Синтаксис:

array array_merge(array $arr1, array $arr2 [, array ...]),

где $arr1 – первый массив,

$arr2 – второй массив.

Функция array_merge объединяет элементы двух или более массивов таким образом, что значения одного массива присоединяются к значениям предыдущего. Результатом работы функции является новый массив.

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

Ниже представлен пример работы функции array_merge.

<HTML>
<HEAD>
<TITLE> Пример использования функции array_merge</TITLE>
</HEAD>
<BODY>
<?php
$day1=array("Понедельник", " Вторник", "Среда", "Четверг");
$day2=array("Пятница", "Суббота", "Воскресенье");
$week=array_merge($day1, $day2);
echo "<B>Первый массив: </B>";
foreach($day1 as $elem) echo "$elem ";
echo "<BR><B>Второй массив: </B>";
foreach($day2 as $elem) echo "$elem ";
echo "<BR><B>Результат слияния двух массивов: </B>";
foreach($week as $elem) echo "$elem ";
?>
</BODY>
</HTML>

ПРеализация данного кода представлена на рисунке 5.22.


Рисунок 5.22 – Слияние массивов для получения полной недели

Таким образом, как видно на рисунке 5.22, в данном примере с помощью функции array_merge осуществлялось слияние двух массивов. В результате на экран был выведен массив, состоящий из всех элементов двух массивов. При этом на экран был выведены названия дней недели.

5.3.4.3 Функция array_slice

Функция array_slice осуществляет получение части массива.

Синтаксис:

array array_slice(array arr, int $offset [, int $len]),

где $arr – исходный массив,

$offset – номер элемента со смещением от начала, с которого начинается вывод массива,

$len – длина получаемой части массива.

Функция array_slice возвращает часть ассоциативного массива “$arr”, начиная с элемента со смещением (номером) “$offset” от начала и длиной “$len” (если последний параметр не задан, до конца массива).

Если параметр “$offset” положителен, последовательность начнется на расстоянии “$offset” от начала массива “$arr”, если отрицателен, последовательность начнется на расстоянии “$offset” от конца “$arr”.

Если в функцию array_slice передан необязательный положительный параметр “$len”, последовательность будет включать “$len” элементов, а если передан отрицательный “$len”, в последовательность войдут все элементы исходного массива, начиная с позиции “$offset” и заканчивая “$len” элементов от конца массива “$arr”.

Ниже представлен пример работы функции array_slice.

<HTML>
<HEAD>
<TITLE> Пример использования функции array_slice</TITLE>
</HEAD>
<BODY>
<?php
$ furniture = array("Скамья", "Парта", "Стол", "Стул", "Доска");
$mebel = array_slice($furniture, 2);
echo "<B> Исходный массив: </B> <BR>";
foreach($furniture as $elem) echo "$elem ";
echo "<BR><B> Полученная часть массива после второго элемента:"</B> "<BR>";
foreach($mebel as $elem) echo "$elem ";
?>
</BODY>
</HTML>

Реализация данного кода представлена на рисунке 5.23.


Рисунок 5.23 – Получение части массива мебели

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

5.3.4.4 Функция array_splice

Функция array_splice удаляет часть массива или заменяет ее частью другого массива.

Синтаксис:

array array_splice(array $arr, int $offset [, int $len] [, int $repl]),

где $arr – исходный массив,

$offset – номер элемента со смещением от начала, с которого начинается удаление или замена массива,

$len – длина, удаляемой или заменяемой части массива,

$repl – заменяемый массив.

Функция array_splice, аналогично функции array_slice, возвращает подмассив “$arr” начиная с индекса “$offset” максимальной длины “$len”. Если параметр “$offset” положителен, будут удалены элементы, находящиеся на расстоянии “$offset” от начала “$arr”. Если отрицателен, будут удалены элементы, находящиеся на расстоянии “$offset” от конца массива “$arr”.

Если параметр “$len” опущен, будут удалены все элементы, начиная с позиции “$offset” и до конца массива. Если передан положительный параметр “$len”, будет удалено “$len” элементов. Если передан отрицательный параметр “$len”, будут удалены элементы исходного массива, начиная с позиции “$offset” и заканчивая позицией, отстоящей на “$len” элементов от конца массива “$arr”.

Если в качестве аргумента передан массив “$repl”, тогда удаленные элементы будут заменены элементами этого массива.

Пример работы функции array_splice представлен ниже.

<HTML>
<HEAD>
<TITLE> Пример использования функции array_splice</TITLE>
</HEAD>
<BODY>
<?php
$star = array("Евгений Миронов", "Сергей Безруков", "Константин Хабенский", "Владислав Галкин", "Дмитрий Певцов");
echo"<b>Исходный массив:</b><br> ";
print_r($star);
$acter=array("Дмитрий Дюжев", "Марат Башаров");
array_splice($star, 3, 2, $acter);
// замена двух элементов начиная с третьей позиции
echo"<BR><B>Массив, полученный в результате замены элементов:</B><BR> ";
print_r($acter); //вывод массива после замены двух элементов
?>
</BODY>
</HTML>

Реализация данного кода представлена на рисунке 5.24.


Рисунок 5.24 – Замена элементов в массиве актеров

Таким образом, как видно на рисунке 5.24, в данном примере с помощью функции array_splice была осуществлена замена двух элементов исходного массива, начиная с элемента, имеющего индекс три, на содержимое второго массива. В результате значения четвертого и пятого элементов были заменены на “Дмитрий Дюжев” и “Марат Башаров”.

5.3.5 Вставка и удаление элементов

5.3.5.1 Функция array_pop

Функция array_pop извлекает и удаляет последний элемент массива.

Синтаксис:

mixed array_pop(array $arr),

где $arr – исходный массив.

Функция array_pop извлекает и возвращает последнее значение параметра массива “$arr”, уменьшая его размер на один элемент. Если массив “$arr” был пуст, возвращается пустая строка.

Ниже представлен пример использования функции array_pop.

<HTML>
<HEAD><TITLE>Пример работы функции array_pop</TITLE></HEAD>
<BODY>
<?php
$garden = array("Груша", "Яблоко", "Виноград", "Абрикос", "Слива");
echo "<B>Исходный массив:<</B><BR>";
print_r($garden); // вывод исходного массива на экран
$fruits = array_pop($garden); // удаление последнего элемента
echo "<BR><BR><B>Массив, полученный после удаления последнего элемента:</B><BR>";
print_r($garden); // вывод массива без последнего элемента
?>
</BODY>
</HTML>

Реализация данного кода представлена на рисунке 5.25.


Рисунок 5.25 – Удаление последнего элемента массива фруктов

Таким образом, как видно на рисунке 5.25, в данном примере с помощью функции array_pop был удален последний элемент исходного массива, элемент “слива”. В качестве элементов массива использовались названия фруктов.

5.3.5.2 Функция array_push

Функция array_push добавляет элементы в конец массива.

Синтаксис:

int array_push(array $arr, mixed $var1 [, mixed $var2, ..]),

где $arr – исходный массив,
$var1, $var2… – добавляемые элементы.

Функция array_push добавляет в конец массива “$arr” заданные элементы. При этом она присваивает им числовые индексы.

Ниже представлен пример работы функции array_push

<HTML>
<HEAD><TITLE>Пример работы функции array_push</TITLE></HEAD>
<BODY>
<?php
$education=array("Школа", "Лицей", "Гимназия");
echo "<B>Исходный массив:</B><BR> ";
print_r($education);
$college = "Колледж";
$tehnic = "Техникум";
array_push($education,"$college ","$tehnic");
// добавление двух элементов в массив
echo "<BR><B>Массив, полученный после добавления двух элементов в конец:</B><BR>";
print_r ($education);
// вывод массива, в который добавлено два элемента
?>
</BODY>
</HTML>

Реализация данного кода представлена на рисунке 5.26.


Рисунок 5.26 – Добавление образовательного учреждения в конец массива

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

5.3.5.3 Функция array_shift

Функция array_shift извлекает и удаляет первый элемент массива.

Синтаксис:

mixed array_shift(array $arr),

где $arr – исходный массив.

Функция array_shift извлекает первое значение массива “$arr” и возвращает его, сокращая размер массива “$arr” на один элемент. Все числовые ключи будут изменены таким образом, что нумерация массива будет начинаться с нуля, в то время как строковые ключи останутся прежними. Если массив “$arr” был пуст, возвращается пустая строка.

5.3.5.4 Функция array_unshift

Функция array_unshift добавляет элементы в начало массива.

Синтаксис:

int array_unshift(list $arr, mixed $var1 [,mixed $var2, ...]),

где $arr – исходный массив,

$var1, $var2… – добавляемые элементы.

Функция array_unshift добавляет переданные в качестве аргументов элементы в начало массива “$arr”. При этом список элементов добавляется целиком, то есть порядок элементов сохраняется. Все числовые ключи будут изменены таким образом, что нумерация массива будет начинаться с нуля, в то время как строковые ключи останутся прежними.

Ниже представлен пример работы функции array_unshift.

<HTML>
<HEAD><TITLE>Пример использования функции array_ unshift </TITLE></HEAD>
<BODY>
<?php
$Auto= array("ВАЗ", "ГАЗ", "Москвич", "ЗИЛ");
echo "<B>Исходный массив: </B><BR>";
print_r($Auto); array_unshift($Auto,"Камаз");
echo "<BR><BR><B>Массив, полученный после добавления элемента в начало: </B><BR>";
print_r($Auto); // вывод массива с добавленным первым элементом
?>
</BODY>
</HTML>

Реализация данного кода представлена на рисунке 5.27.


Рисунок 5.27 – Добавление элемента в начало массива автомобилей

Таким образом, как видно на рисунке 5.27, в данном примере с помощью функции array_unshift элемент “Камаз” был добавлен в начало массива. В качестве элементов массива были использованы марки авто.

5.3.6 Переменные и массивы

5.3.6.1 Функция list

Функция list заносит элементы массива в переменные.

Синтаксис:

list(mixed $varname1 [, mixed $varnamen]),

где mixed $varname1,…, mixed $varnamen – названия переменных.

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

Ниже представлен пример работы функции list.

<HTML>
<HEAD>
<TITLE> Пример использование функции list</TITLE>
</HEAD>
<BODY>
<?php
$bt = array ("Блендер", "Тостер", "Холодильник", "Чайник", "Кофеварка");
list($blender, $toaster, $refrigerator, $teapot, $coffeemaker) = $bt;
echo "<B>Элементы массива, занесенные в переменные: </B><BR>$blender, $toaster, $refrigerator, $teapot, $coffeemaker";
?>
</BODY>
</HTML>

Реализация данного примера представлена на рисунке 5.28.


Рисунок 5.28 – Занесение названий бытовой техники в переменные

Таким образом, как видно на рисунке 5.28, в данном примере с помощью функции list элементы исходного массива были занесены в переменную и выведены на экран. В качестве элементов массива были использованы названия бытовой техники.

5.3.6.2 Функция compact

Функция compact упаковывает в новый массив переменные из текущего контекста.

Синтаксис:

array compact(mixed $varname1 [, mixed $varname2, ...]),

где $varname1, $varname2… - переменные из текущего контекста, заданные своими именами.

Функция compact создает массив, содержащий названия переменных и их значения. Данная функция принимает переменное число параметров. Любой из параметров может быть либо строкой, содержащей название переменной, либо массивом названий переменных. Для каждого из параметров функция compact проверяет, существует ли переменная с таким именем в текущей символьной таблице и добавляет в результирующий массив элемент, ключ которого содержит название переменной, а значение, соответствующее этому ключу, значение переменной.

Если переменной, с именем, соответствующем переданной строке не существует, такая строка будет просто проигнорирована.

Ниже представлен пример работы функции compact.

<HTML>
<HEAD><TITLE>Пример использования функции compact</TITLE></HEAD>
<BODY>
<?php
$music1 = "Rock";
$music2 = "Hip-Hop";
$music3 = "Country";
$music4 = "Jazz";
$music5 = "Rap";
$music=compact("music1", "music2", "music3", "music4", "music5");
echo "<BR><B>Массив, полученный после упаковки в него пяти переменных: </B><BR>";
print_r($music);
?>
</BODY>
</HTML>

Реализация данного кода представлена на рисунке 5.29.


Рисунок 5.29 – Упаковка переменных в массив музыкальных направлений

Таким образом, как видно на рисунке 5.29, в данном примере с помощью функции compact в новый массив были занесены пять переменных. В качестве элементов использовались названия музыкальных направлений.

5.3.6.3 Функция extract

Функция extract осуществляет экспорт элементов массива в переменные.

Синтаксис:

void extract(array $arr [, int $extract_type] [, string $prefix]),

где $arr – исходный массив,

$extract_type – функция, предписывающая, что делать в случае совпадения переменных,

$prefix – префикс.

Функция extract производит действия, прямо противоположные функции compact. Эта функция берет ассоциативный массив в качестве параметра “$arr” и трактует его ключи как имена переменных и значения как значения переменных. Для каждой пары “ключ=>значение” создается переменная в текущей символьной таблице, согласно параметрам “extract_type” и “prefix”.

Параметр “extract_type” предписывает, что делать, если в текущем контексте уже существует переменная с таким же именем, как очередной ключ в массиве “$arr”. Он может быть равен одной из констант, перечисленных ниже:

По умолчанию подразумевается EXTR_OVERWRITE, т.е. переменные перезаписываются.

Ниже представлен пример работы функции compact.

<HTML>
<HEAD><TITLE>Пример использования функции extract</TITLE></HEAD>
<BODY>
<?php
$C = "Netscape";
$var_array= array("E"=>"Explorer", "F"=>"Firefox", "O"=>"Opera", "C"=>"Safari");
extract($var_array, EXTR_PREFIX_SAME, "N");
echo "<b>Элементы массива, экспортированные в переменные: </b><br>$E, $F, $C, $O, $N_C";
?>
</BODY>
</HTML>

Реализация данного кода представлена на рисунке 5.30.


Рисунок 5.30 – Экспорт элементов массива в переменные

Таким образом, как видно на рисунке 5.30, в данном примере исходному массиву присваивается четыре значения, после этого весь массив выводится на экран. В программе создается новая переменная “$C”=“Netscape”, которая совпадает с элементом массива “C”=>“Safari”. Чтобы вывести переменную, которая будет содержать элемент “$Safari”, с помощью функции extract к переменной “$C” добавляется буква “N” и получается название новой переменной. Тем самым, выводятся на экран и элемент “Netscape” и “Safari”. Переменная “$C” будет отвечать за вывод элемента “Netscape”. А новая образованная переменная “$N_C” будет отвечать за вывод элемента “Safari”.

5.4 Примеры использования функций обработки массивов

5.4.1 Практическое использование функций list, asort, each

Для закрепления всех рассмотренных выше функций ниже приведен пример совместного использования некоторых из них, в частности, рассмотрена работа функций list, asort, each.

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

HTML-код программы обработки информации об успеваемости студентов представлен ниже.

<HTML>
<HEAD>
<TITLE> Практическое использование функций list, asort, each </TITLE>
</HEAD>
<BODY>
<FORM method="POST" action="example.php">
<input type="hidden" name="posted" value="true">
<table border="1">
<?php
$student=array("Иван", "Петр", "Сергей", "Алексей", "Василий");
while (list(,$name) = each($student))
{
echo "<tr><td>Какую оценку по математике получил <b>$name</b>?</td>"; echo"<td><select name='math[]'>
<option>5</option>
<option>4</option>
<option>3</option>
<option>2</option> </select>"; echo"<input type='hidden' name='student[]' value='$name'></td>";
}
?>
</tr>
<tr><td> </td><td>
<input type="submit" value="Показать оценки">
</td></tr>
</FORM>
</table>
<?php
if (isset($_POST['posted'])) {
?>
<hr>
<table border="1">
<tr><td colspan="2">
Оценки по математике расположены в следующем порядке:
</td></tr>
<?php
while(list($index,$value)=each($_POST['math']))
{
$gradestudent[]=$_POST['math'][$index].$_POST['student'][$index];
}
asort($gradestudent);
while(list($index,$value)=each($gradestudent))
{
$student_index = $_POST['student'][$index];
$math_index = $_POST['math'][$index];
echo "<tr><td><b>$student_index</b></td><td>$math_index</td></tr>";
}
}
?>
</TABLE>
</BODY>
</HTML>

Реализация данного примера представлена на рисунке 5.31.


Рисунок 5.31 – Результат выставления оценок

Таким образом, как видно на рисунке 5.31, в данном примере решается задача по сортировке полученных данных. А именно сортируется массив оценок, которые согласованы по индексу с массивом студентов. Программа создает динамическую форму, которая выводит имена студентов. Затем обрабатываются элементы массива студентов в цикле. Для этого используются имена студентов, а не их индексы, поэтому передается второй параметр функции list.

После этого создается выпадающий список, содержащий четыре пункта, соответствующих оценкам от 5 до 2. Для хранения оценок создается массив.

Программа получает данные из формы. Далее выполняется цикл для связи двух массивов. Это делается путем конкатенации оценки и имени студента, и сохранения результата в но¬вом массиве.

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

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

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

5.4.2 Практическое использование оператора foreach

Как уже было сказано, обход массива в цикле в языке PHP можно организовать при помощи цикла foreach. Назначение этого цикла в том, что при проходе каждого элемента массива в одну переменную помещается индекс этого элемента, а в другую переменную его значение. Имена этих двух переменных совершенно произвольны.

Цикл foreach является расширением цикла for и используется для обработки массивов с неизвестным числом элементов. Итерации в таком цикле повторяются вплоть до достижения конца массива. Особенно это удобно при обработке больших массивов, так как известно, что число элементов массива может быть достаточно большим.

В представленном ниже примере используется цикл foreach для работы с большим массивом, который содержит названия всех субъектов Российской Федерации (РФ). В примере осуществляется перебор и вывод на экран каждого субъекта.

HTML-код программы обработки элементов массива представлен ниже.

<HTML>
<HEAD><TITLE>Пример использования оператора foreach </TITLE></HEAD>
<BODY>
<?php
$subjects_of_RU = array ("Амурская", "Архангельская", "Астраханская", "Белгородская", "Брянская", "Владимирская", "Волгоградская", "Вологодская", "Воронежская", "Ивановская", "Иркутская", "Калининградская", "Калужская", "Кемеровская", "Кировская", "Костромская", "Курганская", "Курская", "Ленинградская", "Липецкая", "Магаданская", "Московская", "Мурманская", "Нижегородская", "Новгородская", "Новосибирская", "Омская", "Оренбургская", "Орловская", "Пензенская", "Псковская", "Ростовская", "Рязанская", "Самарская", "Саратовская", "Сахалинская", "Свердловская", "Смоленская", "Тамбовская", "Тверская", "Томская", "Тульская", "Тюменская", "Ульяновская", "Челябинская", "Ярославская");
foreach($subjects_of_RU as $id => $subject)
echo "$id - $subject<br />";
?>
</BODY>
</HTML>

Результат работы данного примера показан на рисунке 5.32.


Рисунок 5.32 – Вывод на экран субъектов Российской Федерации

Таким образом, как видно на рисунке 5.32, в данном примере на экран выводятся названия всех субъектов Российской Федерации, то есть содержание исходного массива

При работе данной программы сначала создается массив с названиями всех 46 субъектов Российской Федерации. Затем имя данного массива передается в качестве первого аргумента циклу foreach. Второй и третий аргументы это имена созданных переменных, в которых содержатся индексное значение и связанный с ним элемент массива соответственно. Код выполняется для каждого из 46 элементов массива. В результате на странице построчно отображается каждое индексное значение и соответствующее ему название субъекта. При этом текущий элемент массива и индекс доступны как отдельные переменные. Так как в каждой итерации обрабатывается новый элемент массива, этим переменным при каждой итерации присваиваются новые значения.

Следует отметить, что указывать количество элементов массива не требуется, так как язык РНР определяет их количество автоматически. Это позволяет перемещаться по массиву, который может быть не упорядоченным ни численно, ни по алфавиту.