Операторы работы с массивами, о которых мало говорят

В 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).

  1. Логическое отрицание (!) вернёт true если массив пуст и false если в массиве один или более элемент.
  2. Побитовый и (&) вернёт 1 если оба операнда не пусты и 0 если оба операнда пусты.
  3. Побитовый или (|) вернёт 0 если оба операнда пусты; в противном случае 1.
  4. Побитовый xor (^) вернёт 0 если оба массива одновременно или пусты или полны. Если хотя бы один из массив пуст, вернётся 1.
  5. Сдвиг массива на несколько шагов с помощью оператора (<<) вернёт 1 << n если массив не пуст. В противном случае 0.
  6. Сдвиг права (>>) производит только такое же действие, только в другую сторону.
  7. Остаток от деления (%) вернёт true если оба массива не пусты. Если второй массив пуст, то это вызовет ошибку деление на ноль (“Division by Zero”). Если первый массив пуст, то будет возвращён 0 (результат 0 % 1).
  8. Логическое и (&& и AND) вернёт false если любой из массивов пуст. Если они оба не пусты, то true.
  9. Логическое или (|| и OR) вернёт true если оба операнда не пусты. В противном случае false.
  10. Если оба массива пусты или не пусты, логический (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

Читать комменты и комментировать

Добавить комментарий / отзыв



Защитный код
Обновить

Операторы работы с массивами, о которых мало говорят | | 2013-07-12 08:15:59 | | Статьи Web-мастеру | | В PHP 12 видов операторов: приоритетные, арифметические, присваивания, побитовые, сравнения, управления ошибками, исполнения, инкремента/декремента, логические, строковые, для работы с массивами и | РэдЛайн, создание сайта, заказать сайт, разработка сайтов, реклама в Интернете, продвижение, маркетинговые исследования, дизайн студия, веб дизайн, раскрутка сайта, создать сайт компании, сделать сайт, создание сайтов, изготовление сайта, обслуживание сайтов, изготовление сайтов, заказать интернет сайт, создать сайт, изготовить сайт, разработка сайта, web студия, создание веб сайта, поддержка сайта, сайт на заказ, сопровождение сайта, дизайн сайта, сайт под ключ, заказ сайта, реклама сайта, хостинг, регистрация доменов, хабаровск, краснодар, москва, комсомольск |
 
Поделиться с друзьями: