Работа с несколькими массивами

Работа с несколькими массивами

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_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():

<?php

function 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():

<?php

class 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():

<?php

class 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():

<?php

class 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

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