Операции с массивами

Последнее обновление: 12.03.2021

Рассмотрим некоторые встроенные наиболее распространенные функции, которые мы можем применять при работе с массивами.

Функция is_array

Функция is_array() проверяет, является ли переменная массивом, и если является, то возвращает true, иначе возвращает false. Например:

$users = ["Tom", "Bob", "Sam"];
$isArray = is_array($users);
echo ($isArray==true)?"это массив":"это не массив";

Функции count/sizeof

Функция count() и sizeof() получают количество элементов массива:

$users = ["Tom", "Bob", "Sam"];
$number = count($users);
// то же самое, что
// $number = sizeof($users);
echo "В массиве users $number элемента/ов";

Функции shuffle

Функция shuffle перемешивает элементы массивы случайным образом:

$users = ["Tom", "Bob", "Sam", "Alice"];
shuffle($users);
print_r($users);
// один из возможных вариантов
//Array ( [0] => Bob [1] => Tom [2] => Alice [3] => Sam )

Функции compact

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

<?php

$model = "Apple II";
$producer = "Apple";
$year = 1978;

$data = compact("model", "producer", "year");
print_r($data);
// получится следующий вывод
// Array ( [model] => Apple II [producer] => Apple [year] => 1978 ) 
?>

Функция compact получает в скобках набор переменных. Каждая переменная указывается в кавычка без знака $. Результатом функции является новый массив.

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

В PHP имеются два типа сортировки: сортировка строк по алфавиту и сортировка чисел по возрастанию/убыванию. Если сортируемые значения представляют строки, то они сортируются по алфавиту, если числа - то они сортируются в порядке возрастания чисел. PHP по умолчанию самостоятельно выбирает тип сортировки.

Для сортировки по возрастанию используется функция asort:

$users = ["Tom", "Bob", "Sam", "Alice"];
asort($users);
print_r($users);
// вывод отсортированного массива
// Array ( [3] => Alice [1] => Bob [2] => Sam [0] => Tom )

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

  • SORT_REGULAR: автоматический выбор сортировки

  • SORT_NUMERIC: числовая сортировка

  • SORT_STRING: сортировка по алфавиту

Укажем явно тип сортировки:

asort($users, SORT_STRING);

Чтобы отсортировать массив в обратном порядке, применяется функция arsort:

arsort($users);

Сортировка по ключам

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

$states = ["Spain" => "Madrid", "France" => "Paris", "Germany" => "Berlin", ];
asort($states);
print_r($states);
// массив после asort	- сортировка по значениям элементов
// Array ( [Germany] => Berlin [Spain] => Madrid [France] => Paris ) 

ksort($states);
print_r($states);
// массив после ksort - сортировка по ключам элементов
//  Array ( [France] => Paris [Germany] => Berlin [Spain] => Madrid )

Сортировка по ключам в обратном порядке выполняется функцией krsort():

krsort($states);

Естественная сортировка

Хотя выше описанные функции сортировки прекрасно выполняют свою работу, но их возможностей все-таки недостаточно. Например, отсортируем по возрастанию следующий массив:

<?php
$os = array("Windows 7", "Windows 8", "Windows 10");
asort($os);
print_r($os);
// результат
// Array ( [2] => Windows 10 [0] => Windows 7 [1] => Windows 8 ) 
?>

Так как значения представляют строки, то PHP сортирует по алфавиту. Однако подобная сортировка не учитывает числа и регистр. Поэтому значение "Windows 10" будет идти в самом начале, а не в конце, как должно было быть. И для решения этой проблемы в PHP есть функция natsort(), которая выполняет естественную сортировку:

<?php
$os = array("Windows 7", "Windows 8", "Windows 10");
natsort($os);
print_r($os);
// результат
// Array ( [0] => Windows 7 [1] => Windows 8 [2] => Windows 10) 
?>

Если нам надо еще при этом, чтобы сортировка не учитывала регистр, то мы можем применить функцию natcasesort():

natcasesort($os);
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850