PHP Массивы (8) (Конспект Hexlet)

Синтаксис

  1. Определение массива (лучше однотипные данные, иначе ассоциативный  массив)
    1. $animals = [‘cats’, ‘dogs’, ‘birds’];
    2. $animals = [];
  2. Получение данных
    1. $animals[0]; // первый индекс – 0
    2. count($animals) ; // размер массива, можно еще sizeof
  3. Изменение элементов массива
    • $animals[0] = ‘horses’; // можно менять только существующие элементы массива, иначе – ошибка
  4. Добавление элемента в массив
    • $animals[] = ‘horses’;
  5. Удаление элемента из массива
    • unset($animals[1]); // уменьшение размера массива — нежелательная операция

Проверка существования значения

  1. Функция array_key_exists (array_key_exists(3, $arr)
  2. Функция isset – если ключ есть и равен Null, то возвращает false, в отличии от array_key_exists (isset($arr[3]))
  3. Оператор ??: $arr = $arr[3] ?? 5; // 5 – значение по умолчанию (оператор объединения с null)

Цикл For

  1. Пример цикла с несколькими операторами в блоках инициализации цикла:
    1. for ($i = 0; $i < 5; print(“$i\n”), $i++) { // some code}
    2. for ($i = 0, $length = count($colors); $i < $length; print($i), $i++)
  2. Рассмотренные блоки могут быть пустыми, при этом сохраняются разделители “;” – но это плохо
  3. Определение типов
  4. Сложный (фигурный) синтаксис

Цикл Foreach

  1. Примеры
    1. $userNames = [‘petya’, ‘vasya’, ‘evgeny’];
      foreach ($userNames as $name) { print_r(“{$name}\n”); }
    2. $userNames = [‘petya’, ‘vasya’, ‘evgeny’];
      foreach ($userNames as $index => $name) { print_r(“{$index}: {$name}\n”); }

Агрегация

guard expression – основной код находится на верхнем уровне, а не размещен внутри условной конструкции. Такой код легче читать и у него меньше вложенность

Удаление элементов массива

  1. Редактировать массив – плохо. Лучше реализовать через создание нового массива
  2. функция compact удаляет null из массива

Вложенные массивы

  1. Заполнение массива – array_fill ( int $start_index , int $num , mixed $value ) : array
  2. Проверка на вхождение элемента в массив – in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] ) : bool
  3. Минимальное целое значение: $min = PHP_INT_MIN;

Генерация строки в цикле

  1. Конкатенация и интеполяция – ресурсоемкие операции, лучше использовать:
    1. String Buffer – для статических языков
    2. массив + implode ( string $glue , array $pieces ) : string – для PHP (и других динамических языков)
  2. Назад к основам (Джоэль Спольски)

Обработка строк через преобразование в массив

  1. Разбиение строки в массив – explode ( string $delimiter , string $string [, int $limit = PHP_INT_MAX ] ) : array
  2. Преобразование первого символа в верхний регистр – ucfirst ( string $str ) : string
  3. Разбиение строки в массив по символам – str_split ( string $string [, int $split_length = 1 ] ) : array

Вложенные циклы

  1. Проверка на массив: is_array($value)
  2. Удаление дублирующихся элементов – array_unique ( array $array [, int $sort_flags = SORT_STRING ] ) : array

Теория Множеств

  1. Пересечение в массивах – array_intersect
  2. Объединение массивов – array_merge($array1, $array2, …);
  3. Разность массивов (множество элементов первого массива без элементов второго) – array_diff($friends1, $friends2);
  4. Рассказы о множествах (pdf)

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

  1. php kata
  2. Сортировка средствами php

Ссылки

  1. Пример параметра функции как ссылка:
    function addValueToArray(&$array, $value) { $array[] = $value; }
  2. Передачу по ссылке “лучше не использовать
  3. Правильная оптимизация.
  4. Дополнительные материалы
    1. Передача по ссылке
    2. Возврат по ссылке
    3. Функция sort

Стэк

  1. array_push
  2. array_pop – лучше не использовать
  3. Структуры данных PHP
  4. Цикл по строке: for ($i = 0, $length = strlen($expression); $i < $length; $i++) { $curr = $expression[$i];

Big O (О – большое)

  1. Список алгоритмов сортировки
https://www.bigocheatsheet.com/

Destructuring

  1. Обмен переменными
XOR обмен переменными: https://habr.com/ru/post/183462

2. Дестракчеринг  => [, $secondElement, , $fourthElement, $fifthElement] = [1, 2, 3, 4, 5, 6];

3. foreach ($points as [$x, $y]) …

4. Симметричная деструктуризация массива

Дополнительные задания

  1. оператор spaceship (<=> – возвращает {-1,0,1}, можно сравнить даже массивы)
  2. array_slice() возвращает последовательность элементов массива array, определённую параметрами offset и length (array_slice ( array $array , int $offset [, int $length = NULL [, bool $preserve_keys = FALSE ]] ) : array).
  3. Разбить массив на несколько массивов заданного размера: array_chunk ( array $array , int $size [, bool $preserve_keys = FALSE ] ) : array
  4. Преобразование десятичного числа в двоичное: decbin ( int $number ) : string
  5. Получение количества вхождений подстроки в строку: substr_count ( string $haystack , string $needle [, int $offset = 0 [, int $length ]] ) : int
  6. Последний значение массива: end($arr)
  7. Удаление крайних пробелов – trim($str)