Функций для работы с массивами в PHP достаточно много, и это неудивительно, если учесть, что с массивами при программировании приходится работать достаточно часто. И в этой статье мы разберём основные функции, которые создали для работы с массивами в PHP разработчики.
Для начала разберём простейшую функцию, которая проверяет находится ли элемент в массиве. Функция называется in_array():
<?php
$arr = array("Num", "Str", "Int");
if (in_array("Str", $arr)) echo "Элемент найден";
else echo "Элемент не найден";
?>
Как видно из примера, данная функция проверяет наличие первого параметра среди значений массива, заданного вторым параметром. И возвращает true, если элемент найден, либо false, если не был найден. Особо продвинутые спросят: "А как же быть с такими вещами, как 0 и false, ведь это разные значения, но PHP их считает одинаковыми?". Для этого в функции in_array()существует ещё третий параметр, необязательный, который если имеет значение true, то функция сверяет не только значения, но и типы:
<?php
$arr = array(0, "Str", "Int");
if (in_array(false, $arr, true)) echo "Элемент найден";
else echo "Элемент не найден";
?>
Ещё одна очень полезная функция - array_unique(), которая принимает массив и возвращает массив без дублирующихся значений:
<?php
$arr = array(3, 5, "Val", 3, "Val", 7);
$arr_uniq = array_unique($arr);
print_r($arr_uniq);
?>
Как можно заметить, запустив скрипт, в получившемся массиве нет повторяющихся значений.
Очень важные функции - это функции извлечения части массива из исходного (аналог функции substr(), только она для строк):
<?php
$arr = array(12, 10, 15, "Name", "Some", -0.5);
$arr_2 = array_slice($arr, 3);
print_r($arr_2);
?>
Эта функция принимает два параметра: исходный массив и номер элемента, с которого должен начаться новый массив (напоминаю, что нумерация начинается с нуля). Как видно, новый массив будет от элемента, номер которого задан во втором параметре и до конца исходного массива. Также если добавить третий параметр, то можно задать длину нового массива:
<?php
$arr = array(12, 10, 15, "Name", "Some", -0.5);
$arr_2 = array_slice($arr, 3, 2);
print_r($arr_2);
?>
В результате, Вы увидите: "Array ( [0] => Name [1] => Some )".
Теперь перейдём к последней группе функций - функциям сортировки массивов. Но для начала напоминаю разницу между списками и ассоциативными массивами. Список - это массив, у которого индексами являются числа, которые упорядочены по возрастанию, начиная с 0. А ассоциативный массив - это массив, у которого индексами является, вообще говоря, строки, которые называются ключами. Почему это так важно при сортировке? Если Вы сортируете список, то Вам совершенно не важно, чтобы сохранялась связка: "ключ - значение", так как индексы не служат для идентификации значения, а служат лишь для обращения к нему. А в ассоциативном массиве первостепенное значение имеет именно связка: "ключ-значение", поэтому необходимо, чтобы при сортировке она сохранялась.
Давайте начнём с простого: сортировки списков. Для этого существуют функции sort() и rsort(). Первая функция сортирует массив по возрастанию, а вторая по убыванию:
<?php
$arr = array(15, 12, "String", 40, -2, 0, 12);
sort($arr);
print_r($arr);
echo "<br />";
rsort($arr);
print_r($arr);
?>
Думаю, что здесь всё понятно.
Теперь перейдём к функциям сортировки ассоциативных массивов: asort() и arsort(). Делают они всё тоже самое, но связь "ключ-значение" сохраняется:
<?php
$arr = array("Name" => "Tommy", "Age" => "34", "Level" => "15");
asort($arr);
print_r($arr);
echo "<br />";
arsort($arr);
print_r($arr);
?>
Теперь давайте рассмотрим функции сортировки по ключам ассоциативных массивов: ksort() и krsort():
<?php
$arr = array("Name" => "Tommy", "Age" => "34", "Level" => "15");
ksort($arr);
print_r($arr);
echo "<br />";
krsort($arr);
print_r($arr);
?>
Уверен, что здесь всё прозрачно. А если что-то непонятно, то запустите скрипт, и проанализируйте результат.
И, напоследок, рассмотрим функции пользовательской сортировки: uasort() и uksort(). Обе функции принимают два параметра: массив и пользовательскую функцию сортировки. Функция сортирует массив по значениям, а функция uksort() сортирует массив по ключам. В качестве примера рассмотрим такой скрипт:
<?php
function cmp($x, $y) {
if ($x == $y) return 0;
if ($x == 1) return 1;
if ($y == 1) return -1;
if ($x > $y) return 1;
else return -1;
}
$arr = array("A" => 1, "C" => 3, "B" => 2);
uasort($arr, "cmp");
print_r($arr);
echo "<br />";
uksort($arr, "cmp");
print_r($arr);
?>
Как видите, мы написали свои правила сортировки, по которым число "1" всегда больше любого другого значения. Если ни одно из чисел не является "1", то тогда сравниваем по обычным правилам. Таким образом, PHP сортирует наш массив по правилам, описанным в функции сравнения, название которой мы передали в функциях uasort() и uksort().
Вот и все основные функции для различных манипуляций с массивами. Разумеется, это далеко не все, которые сделали для нас разработчики, но эти функции действительно важные, и на практике применяются регулярно.