array_diff

Определение исключительного пересечения массивов.
Синтаксис:

array array_diff(array arr1, array arr2 [, array ...])

Данная функция возвращает массив, который содержит значения, имеющиеся только в массиве arr1 ( и не имеющиеся в любых других).
При этом индексы сохраняются.

$arr1 = array("a" => "green", "red", "blue", "red");
$arr2 = array("b" => "green", "yellow", "red");
$result = array_diff($arr1, $arr2);
// $result = array("blue")

Повторение одного и того же значения "red" в массиве arr1 обрабатывается как одно значение.
Стоит отметить, что два элемента считаются одинаковыми, только если их строковое представление идентично. Т.е. (string) $elem1 === (string) $elem2.

Также стоит отметить, что данная функция корректно обрабатывает только одно измерение N-мерного массива. Если есть необходимость обрабатывать более глубокие уровни вложенности, можно использовать конструкцию array_diff($arr1[0], $arr2[0]);.

Функция поддерживается PHP 4 >= 4.0.1, PHP 5

array_merge_recursive

Рекурсивное слияние сложных массивов.
Синтаксис:

array array_merge_recursive(array arr1, array arr2 [, array ...])

Функция array_merge_recursive() объединяет элементы массивов, переданных в ее параметрах таким образом, что значения одного массива присоединяются к значениям предудущих.
Функция возвращает массив, состоящий из объединенных массивов.
Если массивы, переданные в параметрах этой функции, имеют одинаковые строковые ключи, тогда значения, соответствующие этим ключам, сливаются в один массив. При этом если одно из значений само является массивом, то оно будет слито с соответствующим значением в другом массиве.
Но если в массивах присутствуют одинаковые числовые ключи, то тогда значение такого ключа, упомянутое последним, не заменит исходное значение, а будет слито с ним.
Пример использования функции array_merge_recursive():

<?php$arr1 = array("color" => array("favorite" =>"red"), 5);
$arr2 = array(10, "color" => array("favorite" =>"green", "blue"));
$result = array_merge_recursive($arr1, $arr2);
print_r($result_;
?>

Пример выведет:

Array(
[color] => Array
(
[favorite] => Array
(
[0] => red
[1] => green
)

[0] => blue
)

[0] => 5
[1] => 10
)

Функция поддерживается PHP 4 >=, PHP 5

array_diff_key()

Вычислить расхождение в массивах, сравнивая ключи (PHP 5 >= 5.1.0RC1)

Описание:

array array_diff_key ( array array1, array array2 [, array ...] )

array_diff_key() возвращает массив, содержащий все значения array1, имеющие ключи, не содержащиеся в последующих параметрах. Обратите внимание, что ассоциации сохраняются. Эта функция схожа с array_diff() за исключением того, что сравниваются ключи, а не значения.

Пример использования array_diff_key()

<?php
$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);

var_dump(array_diff_key($array1, $array2));
?>

Результат выполнения данного примера:

array(2) {
["red"]=>
int(2)
["purple"]=>
int(4)
}

Два ключа пар key => value считаются равными только, если (string) $key1 === (string) $key2 . Другими словами, строгая проверка считает, что строковое представление должно быть идентичным.

Замечание: Обратите внимание, что эта функция обрабатывает только одно измерение n-размерного массива. Естественно, вы можете обрабатывать и более глубокие уровни вложенности, например, используя array_diff_key($array1[0], $array2[0]);.

array_diff_ukey()

Вычислить расхождение в массивах, используя функцию обратного вызова для сравнения ключей (PHP 5 >= 5.1.0RC1)

Описание:

array array_diff_ukey ( array array1, array array2 [, array ..., callback key_compare_func] )

array_diff_ukey() возвращает массив, содержащий все значения array1, имеющие ключи, не содержащиеся в последующих параметрах. Обратите внимание, что ассоциации сохраняются. Эта функция схожа с array_diff() за исключением того, что сравниваются ключи, а не значения.

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

Пример использования array_diff_ukey()

<?php
function key_compare_func($key1, $key2)
{
if ($key1 == $key2)
return 0;
else if ($key1 > $key2)
return 1;
else
return -1;
}

$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);

var_dump(array_diff_ukey($array1, $array2, 'key_compare_func'));
?>

Результат выполнения данного примера:

array(2) {
["red"]=>
int(2)
["purple"]=>
int(4)
}

Замечание: Обратите внимание, что эта функция обрабатывает только одно измерение n-размерного массива. Естественно, вы можете обрабатывать и более глубокие уровни вложенности, например, используя array_diff_ukey($array1[0], $array2[0], 'callback_func');.

array_intersect_key()

Вычислить пересечение массивов, сравнивая ключи (PHP 5 >= 5.1.0RC1)

Описание:

array array_intersect_key ( array array1, array array2 [, array ...] )

array_intersect_key() возвращает массив, содержащий значения array1, имеющие ключи, содержащиеся во всех последующих параметрах..

Пример использования array_intersect_key()

<?php
$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);

var_dump(array_intersect_key($array1, $array2));
?>

Результат выполнения данного примера:

array(2) {
["blue"]=>
int(1)
["green"]=>
int(3)
})

В нашем примере только ключи 'blue' и 'green' содержатся в обоих массивах и поэтому возвращаются. Также обратите внимание, что значения, соответствующие ключам 'blue' и 'green' различны в исходных массивах. Совпадение происходит, так как сравниваются только ключи. Возвращаемые значения берутся из array1.

Два ключа пар key => value считаются равными только, если (string) $key1 === (string) $key2 . Другими словами, строгая проверка считает, что строковое представление должно быть идентичным.

array_intersect_uassoc()

Вычислить пересечение массивов с дополнительной проверкой индекса, осуществляемой при помощи функции, определённой пользователем (PHP 5)

Описание:

array array_intersect_uassoc ( array array1, array array2 [, array ..., callback key_compare_func] )

array_intersect_uassoc() возвращает массив, содержащий значения array1, содержащиеся во всех последующих параметрах. Обратите внимание, что в отличие от array_intersect(), для сравнения используются ключи.

Для сравнения используется функция, определённая пользователем. Она должна возвращать целое число меньшее, равное или большее нуля, если первый параметр, соответственно, меньше, равен или больше второго.

Пример использования array_intersect_uassoc()

<?php
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "GREEN", "B" => "brown", "yellow", "red");

print_r(array_intersect_uassoc($array1, $array2, "strcasecmp"));
?>

Результат выполнения данного примера:

Array
(
[b] => brown
)

array_intersect_ukey()

Вычислить пересечение массивов, используя функцию обратного вызова для сравнения ключей (PHP 5 >= 5.1.0RC1)

Описание:

array array_intersect_ukey ( array array1, array array2 [, array ..., callback key_compare_func] )

array_intersect_ukey() возвращает массив, содержащий значения array1, имеющие ключи, содержащиеся во всех последующих параметрах.

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

Пример использования array_intersect_ukey()

<?php
function key_compare_func($key1, $key2)
{
if ($key1 == $key2)
return 0;
else if ($key1 > $key2)
return 1;
else
return -1;
}

$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);

var_dump(array_intersect_ukey($array1, $array2, 'key_compare_func'));
?>

Результат выполнения данного примера:

array(2) {
["blue"]=>
int(1)
["green"]=>
int(3)
})

В нашем примере только ключи 'blue' и 'green' содержатся в обоих массивах и поэтому возвращаются. Также обратите внимание, что значения, соответствующие ключам 'blue' и 'green' различны в исходных массивах. Совпадение происходит, так как сравниваются только ключи. Возвращаемые значения берутся из array1.

array_uintersect_assoc()

Вычислить пересечение массивов с дополнительной проверкой индексов, используя для сравнения значений функцию обратного вызова (PHP 5)

Описание:

array array_uintersect_assoc ( array array1, array array2 [, array ..., callback data_compare_func] )

array_uintersect_assoc() возвращает массив, содержащий все значения array1 присутствующие во всех последующих аргументах. Обратите внимание, что при сравнении используются ключи в отличие от array_uintersect(). Значения сравниваются при помощи функции обратного вызова.

Пример использования array_uintersect_assoc()

<?php
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "GREEN", "B" => "brown", "yellow", "red");

print_r(array_uintersect_assoc($array1, $array2, "strcasecmp"));
?>

Результат выполнения данного примера:

Array
(
[a] => green
)

Для сравнения используется функция, определённая пользователем. Она должна возвращать целое число меньшее, равное или большее нуля, если первый параметр, соответственно, должен считаться меньше, равен или больше второго.

array_uintersect_uassoc()

Вычислить пересечение массивов с дополнительной проверкой индекса, используя для сравнения индексов и значений функцию обратного вызова (PHP 5)

Описание:

array array_uintersect_uassoc ( array array1, array array2 
[, array ..., callback data_compare_func, callback key_compare_func] )

array_uintersect_uassoc() возвращает массив, содержащий все значения параметра array1, содержащиеся во всех последующих аргументах. Обратите внимание, что в отличие от array_uintersect() в сравнении используются и ключи. Для сравнения и ключей, и значений используется функция обратного вызова.

Пример использования array_uintersect_uassoc()

<?php
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "GREEN", "B" => "brown", "yellow", "red");

print_r(array_uintersect_uassoc($array1, $array2, "strcasecmp", "strcasecmp"));
?>

Результат выполнения данного примера:

Array
(
[a] => green
[b] => brown
)

Для сравнения используется функция, определённая пользователем. Она должна возвращать целое число меньшее, равное или большее нуля, если первый параметр, соответственно, должен считаться меньше, равен или больше второго.

array_uintersect()

Вычислить пересечение массивов, используя для сравнения значений функцию обратного вызова (PHP 5)

Описание:

array array_uintersect ( array array1, array array2 [, array ..., callback data_compare_func] )

array_uintersect() возвращает массив, содержащий все значения параметра array1 присутствующие во всех последующих аргументах. Значения сравниваются при помощи функции обратного вызова.

Пример использования array_uintersect()

<?php
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "GREEN", "B" => "brown", "yellow", "red");

print_r(array_uintersect($array1, $array2, "strcasecmp"));
?>

Результат выполнения данного примера:

Array
(
[a] => green
[b] => brown
[0] => red
)

Для сравнения используется функция, определённая пользователем. Она должна возвращать целое число меньшее, равное или большее нуля, если первый параметр, соответственно, должен считаться меньше, равен или больше второго.

array_diff_assoc

Определение исключительного пересечения массивов с учетом индексов массивов.
Синтаксис:

array array_diff_assoc(array arr1, array arr2 [, array ...])

Данная функция возвращает массив, который содержит значения, имеющиеся только в массиве arr1 ( и не имеющиеся в любых других).
Обратите внимание, что в отличии от функции array_diff(), при сравнении учитываются ключи.
Пример использования array_diff_assoc():

<?php$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "yellow", "red");
$result = array_diff_assoc($array1, $array2);
print_r($result);
?>

Пример выведет следующее:

Array(
[b] => brown
[c] => blue
[0] => red
)

В приведенном примере пара "a" => "green" присутствует в обоих массивах, поэтому она не вошла в результирующий массив. В отличие от этого, значение red присутствует в результирующем массиве, т.к. в первом массиве это значение имело ключ 0,
а во втором массиве оно имело ключ 1.

Две пары ключ => значение считаются равными, если они тождественны друг другу, т.е. (string) $elem1 === (string) $elem2.

Обратите внимание, что данная функция не позволяет напрямую сравнивать многомерные массивы. Хотя конечно можно сравнить вложенные массивы, используя, например, array_diff_assoc ($array1 [0], $array2 [0]);.

Функция поддерживается PHP 4 >=4.3.0, PHP 5

array_diff_uassoc

Определение различия между массивами при помощи пользовательской функции с дополнительной проверкой ключей массива.
Синтаксис:

array array_diff_uassoc(array arr1, array arr2 [, array ..., callback key_compare_func])

Функция array_diff_uassoc() возвращает массив, который содержит значения, имеющиеся только в массиве arr1 ( и не имеющиеся в любых других).

Обратите внимание, что в отличии от функции array_diff(), при сравнении учитываются ключи. Сделано это при помощи пользовательской функции key_compare_func. Эта функция должна возвращать целое число, которое должно быть меньше нуля, если первый переданный ей аргумент меньше чем второй, равное нулю, если первый аргумент равен второму, и больше нуля, если первый аргумент больше второго. Эта функция отличается от array_diff_assoc(), где сравнение значений и индексов происходит автоматически.
Пример использования array_diff_uassoc():

<?phpfunction key_compare_func($a, $b) 
{
if ($a === $b) {
return 0;
}
return ($a > $b)? 1:-1;
}

$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "yellow", "red");
$result = array_diff_uassoc($array1, $array2, "key_compare_func");
?>

Пример выведет следующее:

Array(
[b] => brown
[c] => blue
[0] => red
)

В приведенном примере пара "a" => "green" присутствует в обоих массивах, поэтому она не вошла в результирующий массив. В отличие от этого, значение red присутствует в результирующем массиве, т.к. в первом массиве это значение имело ключ 0,
а во втором массиве оно имело ключ 1.

Равенство индексов проверяется пользовательской функцией.
Обратите внимание, что данная функция не позволяет напрямую сравнивать многомерные массивы. Хотя конечно можно сравнить вложенные массивы, используя, например, array_diff_uassoc ($array1[0], $array2[0], "key_compare_func");.

Функция поддерживается PHP 5

array_udiff

Сравнивает массивы используя пользовательскую функцию.
Синтаксис:

array array_udiff( array array1, array array2 [, array ..., callback data_compare_func])

Функция array_udiff() возвращает массив, содержащий все значения массива array1, которые не присутствуют в других массивах, переданных в параметрах.
Стоит отметить, что ключи значений сохраняются.
Для сравнения значений массивов используется пользовательская функция data_compare_func. Она возвращает число, большее нуля, равное нулю или меньшее нуля, если первый аргумент, переданные ей в виде параметра, больше, равен или меньше второго параметра соответственно. Это отличается от функции array_diff(),
где используется встроенная функция сравнения. Пример использования функции array_udiff_assoc():

<?phpclass cr {
private $priv_member;
function cr($val)
{
$this->priv_member = $val;
}

function comp_func_cr($a, $b)
{
if ($a->priv_member === $b->priv_member) return 0;
return ($a->priv_member > $b->priv_member)? 1:-1;
}
}
$a = array("0.1" => new cr(9), "0.5" => new cr(12), 0 => new cr(23), 1=> new cr(4), 2 => new cr(-15),);
$b = array("0.2" => new cr(9), "0.5" => new cr(22), 0 => new cr(3), 1=> new cr(4), 2 => new cr(-15),);

$result = array_udiff($a, $b, array("cr", "comp_func_cr"));
print_r($result);
?>

Этот пример выведет следующее:

Array(
[0.5] => cr Object
(
[priv_member:private] => 12
)

[0] => cr Object
(
[priv_member:private] => 23
)

)

Два значения будут сочтены равными, только если (string) $elem1 === (string) $elem2 (т.е. когда строки содержат одно и тоже).

Стоит отметить, что данная функция в случае многомерного массива использует для сравнения одного измерение. Если вы хотите пройтись по всем измерениям, стоит использовать конструкцию array_udiff($array1[0], $array2[0], "data_compare_func");

Функция поддерживается PHP 5

array_udiff_assoc

Сравнивает массивы используя пользовательскую функцию.
Синтаксис:

array array_udiff_assoc( array array1, array array2 [, array ..., callback data_compare_func])

Функция array_udiff_assoc() возвращает массив, содержащий все значения массива array1, которые не присутствуют в других массивах, переданные в параметрах. Стоит отметить, что ключи значений используются при сравнении в отличии от функций array_diff() и array_udiff().

Для сравнения значений массивов используется пользовательская функция. Этим данная функция отличается от array_diff_assoc(), которая использует внутреннюю функции для сравнения.
Пример использования функции array_udiff_assoc():

<?phpclass cr {
private $priv_member;
function cr($val)
{
$this->priv_member = $val;
}

function comp_func_cr($a, $b)
{
if ($a->priv_member === $b->priv_member) return 0;
return ($a->priv_member > $b->priv_member)? 1:-1;
}
}

$a = array("0.1" => new cr(9), "0.5" => new cr(12), 0 => new cr(23), 1=> new cr(4), 2 => new cr(-15),);
$b = array("0.2" => new cr(9), "0.5" => new cr(22), 0 => new cr(3), 1=> new cr(4), 2 => new cr(-15),);

$result = array_udiff_assoc($a, $b, array("cr", "comp_func_cr"));
print_r($result);
?>

Этот пример выведет следующее:

Array(
[0.1] => cr Object
(
[priv_member:private] => 9
)

[0.5] => cr Object
(
[priv_member:private] => 12
)

[0] => cr Object
(
[priv_member:private] => 23
)
)

В нашем примере пара 1=> new cr(4) присутствует в обеих массивах и по этому она не вошла в результирующий массив.
Для сравнения используется пользовательская функция. Она возвращает значение, меньшее нуля, равное нулю или большее нуля, если переданный ей первый параметр меньше второго, равен второму или больше второго соответственно.
Функция поддерживается PHP 5

array_udiff_uassoc

Сравнивает массивы используя пользовательскую функцию.
Синтаксис:

array array_udiff_uassoc(array array1,array array2
[, array...,callback data_compare_func,callback key_compare_func])

Функция array_udiff_uassoc() возвращает массив, содержащий все значения массива array1, которые не присутствуют в других массивах, переданные в параметрах. Стоит отметить, что ключи значений используются при сравнении в отличии от функций array_diff() и array_udiff().

Для сравнения значений массивов используется пользовательская функция data_compare_func. Этим данная функция отличается от array_diff_assoc(), которая использует внутреннюю функции для сравнения.
Сравнение ключей (индексов) происходит при помощи пользовательской функции key_compare_func. Этим данная функция отличается от array_udiff_assoc(), которая использует внутреннюю функции для сравнения.
Пример использования функции array_udiff_uassoc():

<?phpclass cr {
private $priv_member;
function cr($val)
{
$this->priv_member = $val;
}

function comp_func_cr($a, $b)
{
if ($a->priv_member === $b->priv_member) return 0;
return ($a->priv_member > $b->priv_member)? 1:-1;
}

function comp_func_key($a, $b)
{
if ($a === $b) return 0;
return ($a > $b)? 1:-1;
}
}
$a = array("0.1" => new cr(9), "0.5" => new cr(12), 0 => new cr(23), 1=> new cr(4), 2 => new cr(-15),);
$b = array("0.2" => new cr(9), "0.5" => new cr(22), 0 => new cr(3), 1=> new cr(4), 2 => new cr(-15),);

$result = array_udiff_uassoc($a, $b, array("cr", "comp_func_cr"), array("cr", "comp_func_key"));
print_r($result);
?>

Этот пример выведет следующее:

Array(
[0.1] => cr Object
(
[priv_member:private] => 9
)

[0.5] => cr Object
(
[priv_member:private] => 12
)

[0] => cr Object
(
[priv_member:private] => 23
)
)

В нашем примере пара 1=> new cr(4) присутствует в обеих массивах и по этому она не вошла в результирующий массив.
Для сравнения используется пользовательская функция. Она возвращает значение, меньшее нуля, равное нулю или большее нуля, если переданный ей первый параметр меньше второго, равен второму или больше второго соответственно.
Функция поддерживается PHP 5

array_intersect

Определение включительного пересечения массивов.
Синтаксис:

array array_intersect(array arr1, array arr2 [, array ...])

Функция array_intersect() возвращает массив, который содержит значения массива arr1, имеющиеся во всех остальных массивах. При этом индексы сохраняются.
Пример использования функции array_intersect():

<?php$arr1 = array("a" => "green", "red", "blue");
$arr2 = array("b" => "green", "yellow", "red");
$result = array_intersect($arr1, $arr2);
print_r($result);
?>

Пример выведет:

Array(
[a] => green
[0] => red
)

Функция поддерживается PHP 4 >= 4.0.1, PHP 5

array_intersect_assoc

Функция возвращает пересечения значений массивов с сохранением индексов.
Синтаксис:

array array_intersect_assoc(array array1, array array2 [, array ...])

Функция array_intersect_assoc() возвращает массив, который содержит все значения array1, имеющиеся во всех остальных перечисленных массивах. В отличие от функции array_intersect() при сравнении ключи учитываются.
Пример использования функции array_intersect_assoc():

<?php$array1 = array("a" => "яблоко", "b" => "груша", "c" => "дыня", "слива");
$array2 = array("a" => "яблоко", "апельсин", "слива");
$result_array = array_intersect_assoc($array1, $array2);
?>

Пример выведет следующее:

Array(
[a] => яблоко
)

Приведенный пример вывел только значение [a] => яблоко, т.к. это значение присутствовало и в первом и во втором массиве.
Значение дыня не выведено, т.к. в первом массиве у него был индекс 0, а во втором - 1

Функция поддерживается PHP 4 >= 4.3.0, PHP 5

array_merge

Слияние массивов.
Синтаксис:

array array_merge(array arr1, array arr2 [, array ...])

Функция array_merge() призвана устранить все недостатки, присущие оператору + для слияния массивов. А именно, она сливает массивы, перечисленные в ее аргументах, в оди большой массив и возвращает результат. Т.е. значени одного массива присоединяются к значениям предыдущего.
Если в массивах встречаются одинаковые строковые ключи, то тогда значения, принадлежащие этим ключам, сливаются в один массив таким образом, чтобы если одно из значений в свою очередь является массивом, функция array_merge() сливает его с соответствующим значением в другом массиве.
Однако это не затрагивает числовые ключи: элементы с такими ключами помещаются в конец результирующего массива в любом случае.
Пример использования функции array_merge():

<?php$array1 = array ("color" => "red", 2, 4);
$array2 = array ("a", "b", "color" => "green", "shape" => "trapezoid", 4);
$result = array_merge ($array1, $array2);
print_r($result);
?>

Пример выведет следующее:

Array(
[color] => green
[0] => 2
[1] => 4
[2] => a
[3] => b
[shape] => trapezoid
[4] => 4
)

Другой пример использования функции array_merge():

<?php$array1 = array();
$array2 = array(1 => "data");
$result = array_merge($array1, $array2);
print_r($result);
?>

Пример выведет следующее:

Array(
[0] => data
)

Стоит отметить, что числовые ключи были потеряны.
Если есть необходимость просто слить массивы вместе, используйте оператор +

<?php$array1 = array();
$array2 = array(1 => "data");
$result = $array1 + $array2;
print_r($result);
?>

Пример выведет следующее:

Array(
[1] => data
)

Функция поддерживается PHP 4, PHP 5