Операторы работы с массивами, о которых мало говорят
В PHP 12 видов операторов: приоритетные, арифметические, присваивания, побитовые, сравнения, управления ошибками, исполнения, инкремента/декремента, логические, строковые, для работы с массивами и проверки типа. В этой статье мы подробно рассмотрим операторы, которые можно задействовать при работе с массивами.
Операторы для работы с массивами
В официальной документации операторы работы с массивами описаны довольно-таки кратко, и в итоге не совсем понятно где и как их можно применять. Давайте рассмотрим каждый оператор. Все они являются бинарными, а значит предназначены для работы с двумя массивами.
Объединение массивов
Итак, в первую очередь рассмотрим оператор (+) для объединения массивов на основе ключей. Ключи второго массива, будут игнорированы в случае если в первом массиве есть элементы с точно такими же ключами. Все остальные элементы из второго массива будут добавлены к первому:
<?php $array1 = array('a', 'b', 'c'); $array2 = array('d', 'e', 'f', 'g', 'h', 'i'); print_r($array1 + $array2); print_r($array2 + $array1);
Array ( [0] => a [1] => b [2] => c [3] => g [4] => h [5] => i ) Array ( [0] => d [1] => e [2] => f [3] => g [4] => h [5] => i )
При выводе результата через print_r(), первые три элемента массива $array2 содержат точно такие же ключи, как в массиве $array1, так что элементы ‘d’, ‘e’, и ‘f’ не попадут в общий массив. При вызове второго print_r(), все ключи элементов в массиве $array1 уже существуют в массиве $array2, поэтому будут игнорированы.
Данная особенность может привести к неожиданным результатам, но в то же время, это может способствовать неплохой оптимизации кода.
<?php $array1 = array('0' => 'a', '1' => 'b', '2' => 'c', '3' => 'd'); $array2 = array(false => 'e', 1 => 'f', 2 => 'g', 3 => 'h', 4 => 'i'); print_r($array1 + $array2);
Array ( [0] => a [1] => b [2] => c [3] => d [4] => i )
Многие думают, что результат сложения зависит от значений элементов массивов, а не ключей. Это не так. Для объединения массивов на основе значений можете воспользоваться комбинацией функций ofarray_merge() и array_unique():
<?php $union = array_unique(array_merge($array1, $array2)); print_r($union);
Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f [6] => g [7] => h [8] => i )
Сравнение массивов
Оператор (==) можно заюзать для того чтобы проверить содержат ли массивы одинаковые значения. Оператор вернёт true если все пары (ключ:значение) из первого массива совпадут с содержанием второго массива.
<?php $array1 = array('1' => 1, '2' => 2, '3' => 3, '0' => 0); $array2 = array(false => '0', 1 => '1', 2 => '2', 3 => '3'); var_dump($array1 == $array2);
Расположение элементов в двух массивах разное, но они равны. Следующий пример, может показаться странным, но эти массивы не равны из-за разных значений ключей и значений:
<?php $array1 = array(1, 2); $array2 = array(2, 1); var_dump($array1 == $array2);
Для того чтобы проверить массивы на неравенство следует использовать операторы != и <>. Принцип работы точно такой же:
<?php $array1 = array('1' => 1, '2' => 2, '3' => 3, '0' => 0); $array2 = array(false => '0', 1 => '1', 2 => '2', 3 => '3'); var_dump($array1 != $array2);
Идентичность массивов
С помощью оператора === можно проверить абсолютную идентичность массивов:
- содержат одно и тоже количество элементов;
- ключи и значения элементов одинаковы в обоих массивах;
- порядок элементов;
- абсолютное совпадение по типам данных у значений элементов;
Тут есть несколько особенностей: если ключи одного массива типа string, а второго integer и все значения совпадают, то оператор вернёт true. Если же вместо integer воспользоваться float, то результат будет false.
<?php // массивы идентичны, различаются только в типах данных ключей $array1 = array('0' => '0', '1' => '1', '2' => '2', '3' => '3'); $array2 = array(0 => '0', 1 => '1', 2 => '2', 3 => '3'); var_dump($array1 === $array2);
<?php // порядок элементов не совпадает $array1 = array('0' => '0', '1' => '1', '2' => '2', '3' => '3'); $array2 = array(1 => '1', 2 => '2', 3 => '3', 0 => '0'); var_dump($array1 === $array2);
<?php // ключ в первом массива типа string, а во втором float $array1 = array('0.5' => '0'); $array2 = array(0.5 => '0'); var_dump($array1 === $array2);
Ну и обратная проверка может быть осуществлена с помощью оператора (!==).
Используем другие операторы при работе с массивами
PHP действует по-разному при применении других операторов к массивам. Сейчас посмотрим какие могут быть результаты.
Fatal Error: Unexpected Operand Type
PHP выкинет fatal error при использовании следующий операторов по отношению к массивам:
- побитовый оператор не (~)
- арифметический оператор смены знака (-)
- арифметический оператор вычитания (-)
- арифметический оператор умножения (*)
- арифметический оператор деления (/)
Работа с типом Массив, как с типом Integer
При использовании следующих операторов, работа с массивами будет преобразована к работе с целыми числами. Пустой массив (без элементов) это int(0), а не пустой int(1).
- Логическое отрицание (!) вернёт true если массив пуст и false если в массиве один или более элемент.
- Побитовый и (&) вернёт 1 если оба операнда не пусты и 0 если оба операнда пусты.
- Побитовый или (|) вернёт 0 если оба операнда пусты; в противном случае 1.
- Побитовый xor (^) вернёт 0 если оба массива одновременно или пусты или полны. Если хотя бы один из массив пуст, вернётся 1.
- Сдвиг массива на несколько шагов с помощью оператора (<<) вернёт 1 << n если массив не пуст. В противном случае 0.
- Сдвиг права (>>) производит только такое же действие, только в другую сторону.
- Остаток от деления (%) вернёт true если оба массива не пусты. Если второй массив пуст, то это вызовет ошибку деление на ноль (“Division by Zero”). Если первый массив пуст, то будет возвращён 0 (результат 0 % 1).
- Логическое и (&& и AND) вернёт false если любой из массивов пуст. Если они оба не пусты, то true.
- Логическое или (|| и OR) вернёт true если оба операнда не пусты. В противном случае false.
- Если оба массива пусты или не пусты, логический (XOR) вернёт false. В противном случае, если хотя бы один массив пуст true.
Работа с типом Массив, как с типом Строка
При конкатенации двух массивов с помощью (.) будет получен следующий результат:
<?php $array1 = array(0, 1, 2, 3); $array1 = array(0, 1, 2, 3); var_dump($array1 . $array2);
Без эффекта
Использование операторов (++ и --) не даёт никакого эффекта.
<?php $array1 = $array2; var_dump((++$array1) === $array2);
Источник: http://feedproxy.google.com/~r/ruseller/CdHX/~3/GcIQvqTeObI/lessons.php
Дайджест новых статей по интернет-маркетингу на ваш email
Новые статьи и публикации
- 2024-04-17 » 23 сервиса для эффективного экспресс-аудита любого сайта
- 2024-04-08 » Яндекс переходит на новую версию Wordstat
- 2024-04-08 » Яндекс интегрировал в свой облачный сервис эмпатичную нейросеть
- 2024-04-08 » Новая версия нейросети Claude превзошла по мощности аналоги Google и OpenAI
- 2024-04-08 » Как пользоваться GPT 4 и Claude бесплатно и без VPN
- 2024-03-13 » Стратегии SEO на 2024 год
- 2024-03-13 » Как использовать анимацию с помощью JavaScript-библиотеки GSAP
- 2024-03-13 » Использование GSAP 3 для веб-анимации
- 2024-03-13 » Cогласование топографической съёмки с эксплуатирующими организациями
- 2024-02-19 » Теряются лиды? Как настроить сквозную аналитику
- 2024-02-17 » Мерч и IT: на что обратить внимание в 2024 году
- 2024-02-16 » Копируем с RSync: основные примеры синхронизации файлов
- 2024-02-15 » Лучшие noCode AI платформы для создания диалоговых ботов
- 2024-02-14 » Факторы ранжирования Google 2024 — исследование Semrush
- 2024-02-12 » Перенос сайта на другой хостинг
- 2024-02-05 » В России сформирован реестр хостинг-провайдеров
- 2024-02-04 » Использование SSH для подключения к удаленному серверу Ubuntu
- 2024-02-03 » Подключаемся к серверу за NAT при помощи туннеля SSH. Простая и понятная инструкция
- 2024-02-02 » Настройка CI/CD для Gitlab-репозитория: схемы и гайд по шагам
- 2024-02-01 » GitLab CI Pipeline. Запуск сценария через SSH на удаленном сервере
- 2024-01-29 » Introduction to GitLab’s CI/CD for Continuous Deployments
- 2024-01-26 » Настройка GitLab CI/CD
- 2024-01-25 » Установка shell gitlab runner
- 2024-01-25 » Установка и регистрация gitlab-runner в docker контейнере
- 2024-01-25 » Переменные Gitlab-Ci
- 2024-01-25 » Настройка CI/CD в GitLab для синхронизации проекта с веб-серверами
- 2024-01-25 » Копирование файлов scp
- 2024-01-21 » Бездепозитные бонусы от казино: обзор условий и правил использования
- 2024-01-18 » Современная обработка ошибок в PHP
- 2024-01-18 » Пример шаблона проектирования MVC в PHP
Не делай другим то, что ты хотел бы, чтобы они делали для тебя. У вас могут быть разные вкусы Шоу Джордж Бернард - (1856-1950) - английский писатель. В своем творчестве ниспровергал догматизм и предвзятость, традиционность представлений |
Мы создаем сайты, которые работают! Профессионально обслуживаем и продвигаем их , а также по всей России и ближнему зарубежью с 2006 года!
Как мы работаем
Заявка
Позвоните или оставьте заявку на сайте.
Консультация
Обсуждаем что именно Вам нужно и помогаем определить как это лучше сделать!
Договор
Заключаем договор на оказание услуг, в котором прописаны условия и обязанности обеих сторон.
Выполнение работ
Непосредственно оказание требующихся услуг и работ по вашему заданию.
Поддержка
Сдача выполненых работ, последующие корректировки и поддержка при необходимости.