Синтаксис
- Определение массива (лучше однотипные данные, иначе ассоциативный массив)
- $animals = [‘cats’, ‘dogs’, ‘birds’];
- $animals = [];
- Получение данных
- $animals[0]; // первый индекс – 0
- count($animals) ; // размер массива, можно еще sizeof
- Изменение элементов массива
- $animals[0] = ‘horses’; // можно менять только существующие элементы массива, иначе – ошибка
- Добавление элемента в массив
- $animals[] = ‘horses’;
- Удаление элемента из массива
- unset($animals[1]); // уменьшение размера массива — нежелательная операция
Проверка существования значения
- Функция array_key_exists (array_key_exists(3, $arr)
- Функция isset – если ключ есть и равен Null, то возвращает false, в отличии от array_key_exists (isset($arr[3]))
- Оператор ??: $arr = $arr[3] ?? 5; // 5 – значение по умолчанию (оператор объединения с null)
Цикл For
- Пример цикла с несколькими операторами в блоках инициализации цикла:
- for ($i = 0; $i < 5; print(“$i\n”), $i++) { // some code}
- for ($i = 0, $length = count($colors); $i < $length; print($i), $i++)
- Рассмотренные блоки могут быть пустыми, при этом сохраняются разделители “;” – но это плохо
- Определение типов
- Сложный (фигурный) синтаксис
Цикл Foreach
- Примеры
- $userNames = [‘petya’, ‘vasya’, ‘evgeny’];
foreach ($userNames as $name) { print_r(“{$name}\n”); } - $userNames = [‘petya’, ‘vasya’, ‘evgeny’];
foreach ($userNames as $index => $name) { print_r(“{$index}: {$name}\n”); }
- $userNames = [‘petya’, ‘vasya’, ‘evgeny’];
Агрегация
guard expression – основной код находится на верхнем уровне, а не размещен внутри условной конструкции. Такой код легче читать и у него меньше вложенность
Удаление элементов массива
- Редактировать массив – плохо. Лучше реализовать через создание нового массива
- функция compact – удаляет null из массива
Вложенные массивы
- Заполнение массива – array_fill ( int
$start_index
, int$num
, mixed$value
) : array - Проверка на вхождение элемента в массив – in_array ( mixed
$needle
, array$haystack
[, bool$strict
=FALSE
] ) : bool - Минимальное целое значение: $min = PHP_INT_MIN;
Генерация строки в цикле
- Конкатенация и интеполяция – ресурсоемкие операции, лучше использовать:
- String Buffer – для статических языков
- массив + implode ( string
$glue
, array$pieces
) : string – для PHP (и других динамических языков)
- Назад к основам (Джоэль Спольски)
Обработка строк через преобразование в массив
- Разбиение строки в массив – explode ( string $delimiter , string $string [, int $limit = PHP_INT_MAX ] ) : array
- Преобразование первого символа в верхний регистр – ucfirst ( string $str ) : string
- Разбиение строки в массив по символам – str_split ( string $string [, int $split_length = 1 ] ) : array
Вложенные циклы
- Проверка на массив: is_array($value)
- Удаление дублирующихся элементов – array_unique ( array
$array
[, int$sort_flags
= SORT_STRING ] ) : array
Теория Множеств
- Пересечение в массивах – array_intersect
- Объединение массивов – array_merge($array1, $array2, …);
- Разность массивов (множество элементов первого массива без элементов второго) – array_diff($friends1, $friends2);
- Рассказы о множествах (pdf)
Сортировка массивов
Ссылки
- Пример параметра функции как ссылка:
function addValueToArray(&$array, $value) { $array[] = $value; } - Передачу по ссылке “лучше не использовать“
- Правильная оптимизация.
- Дополнительные материалы
Стэк
- array_push
- array_pop – лучше не использовать
- Структуры данных PHP
- Цикл по строке: for ($i = 0, $length = strlen($expression); $i < $length; $i++) { $curr = $expression[$i];
Big O (О – большое)
Destructuring
- Обмен переменными
2. Дестракчеринг => [, $secondElement, , $fourthElement, $fifthElement] = [1, 2, 3, 4, 5, 6];
3. foreach ($points as [$x, $y]) …
4. Симметричная деструктуризация массива
Дополнительные задания
- оператор spaceship (<=> – возвращает {-1,0,1}, можно сравнить даже массивы)
- array_slice() возвращает последовательность элементов массива array, определённую параметрами offset и length (array_slice ( array $array , int $offset [, int $length = NULL [, bool $preserve_keys = FALSE ]] ) : array).
- Разбить массив на несколько массивов заданного размера: array_chunk ( array $array , int $size [, bool $preserve_keys = FALSE ] ) : array
- Преобразование десятичного числа в двоичное: decbin ( int $number ) : string
- Получение количества вхождений подстроки в строку: substr_count ( string $haystack , string $needle [, int $offset = 0 [, int $length ]] ) : int
- Последний значение массива: end($arr)
- Удаление крайних пробелов – trim($str)