array_intersect_ukey
(PHP 5 >= 5.1.0, PHP 7)
array_intersect_ukey — Вычисляет схождение массивов, используя callback-функцию для сравнения ключей
Описание
$array1
, array $array2
[, array $...
], callable $key_compare_func
)
array_intersect_ukey() возвращает массив,
содержащий значения array1
,
имеющие ключи, содержащиеся во всех последующих параметрах.
Список параметров
-
array1
-
Основной проверяемый массив.
-
array2
-
Первый массив, с которым сравниваются ключи.
-
...
-
Дополнительные массивы, с которыми осуществляется сравнение ключей.
-
key_compare_func
-
Функция сравнения должна возвращать целое, которое меньше, равно или больше нуля, если первый аргумент является соответственно меньшим, равным или большим чем второй.
Возвращаемые значения
Возвращает все элементы array1
, чьи ключи
существуют во всех переданных аргументах.
Примеры
Пример #1 Пример использования 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_diff() - Вычислить расхождение массивов
- array_udiff() - Вычисляет расхождение массивов, используя для сравнения callback-функцию
- array_diff_assoc() - Вычисляет расхождение массивов с дополнительной проверкой индекса
- array_diff_uassoc() - Вычисляет расхождение массивов с дополнительной проверкой индекса, осуществляемой при помощи callback-функции
- array_udiff_assoc() - Вычисляет расхождение в массивах с дополнительной проверкой индексов, используя для сравнения значений callback-функцию
- array_udiff_uassoc() - Вычисляет расхождение в массивах с дополнительной проверкой индексов, используя для сравнения значений и индексов callback-функцию
- array_diff_key() - Вычисляет расхождение массивов, сравнивая ключи
- array_diff_ukey() - Вычисляет расхождение массивов, используя callback-функцию для сравнения ключей
- array_intersect() - Вычисляет схождение массивов
- array_intersect_assoc() - Вычисляет схождение массивов с дополнительной проверкой индекса
- array_intersect_uassoc() - Вычисляет схождение массивов с дополнительной проверкой индекса, осуществляемой при помощи callback-функции
- array_intersect_key() - Вычислить пересечение массивов, сравнивая ключи
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения, относящиеся к переменным и типам
- Массивы
- array_change_key_case
- array_chunk
- array_column
- array_combine
- array_count_values
- array_diff_assoc
- array_diff_key
- array_diff_uassoc
- array_diff_ukey
- array_diff
- array_fill_keys
- array_fill
- array_filter
- array_flip
- array_intersect_assoc
- array_intersect_key
- array_intersect_uassoc
- array_intersect_ukey
- array_intersect
- array_key_exists
- array_keys
- array_map
- array_merge_recursive
- array_merge
- array_multisort
- array_pad
- array_pop
- array_product
- array_push
- array_rand
- array_reduce
- array_replace_recursive
- array_replace
- array_reverse
- array_search
- array_shift
- array_slice
- array_splice
- array_sum
- array_udiff_assoc
- array_udiff_uassoc
- array_udiff
- array_uintersect_assoc
- array_uintersect_uassoc
- array_uintersect
- array_unique
- array_unshift
- array_values
- array_walk_recursive
- array_walk
- array
- arsort
- asort
- compact
- count
- current
- each
- end
- extract
- in_array
- key_exists
- key
- krsort
- ksort
- list
- natcasesort
- natsort
- next
- pos
- prev
- range
- reset
- rsort
- shuffle
- sizeof
- sort
- uasort
- uksort
- usort
Коментарии
"array_intersect_ukey" will not work if $key_compare_func is using regular expression to perform comparison. "_array_intersect_ukey" fully implements the "array_intersect_ukey" interface and handles properly boolean comparison. However, the native implementation should be preferred for efficiency reasons.
<?php
$key_compare_func = function ($a, $b) {
var_dump('a=' . $a. '; b=' . $b);
if (strpos($b, '/') === 0) {
return preg_match($b, $a) > 0 ? 0 : -1;
}
if ($a == $b) {
$weight = 0;
} else if ($a > $b) {
$weight = 1;
} else {
$weight = -1;
}
var_dump('literal comparison: ' . $weight);
return $weight;
};
$foo = ['aab' => '', 'bbb' => '', 'ccb' => '', 'abb' => ''];
$bar = ['/[a-z]b[a-z]/' => ''];
$buz = ['/c[a-z][a-z]/' => ''];
echo PHP_EOL . 'array_intersect_ukey' . PHP_EOL . PHP_EOL;
$subject = array_intersect_ukey ($foo, $bar, $buz, $key_compare_func);
echo PHP_EOL;
var_dump($subject);
echo PHP_EOL . '_array_intersect_ukey' . PHP_EOL . PHP_EOL;
$subject = _array_intersect_ukey($foo, $bar, $buz, $key_compare_func);
echo PHP_EOL;
var_dump($subject);
/**
* @author Gajus Kuizinas <gk@anuary.com>
* @version 1.0.0 (2013 09 30)
* @url https://gist.github.com/gajus/271ad5f36337a32a184c
*/
function _array_intersect_ukey (array $arr1, array $arr2, $key_compare_func) {
$arr_matched = [];
$arr_unmatched = [];
$args = func_get_args();
$key_compare_func = end($args);
foreach ($arr1 as $k1 => $v1) {
foreach ($arr2 as $k2 => $v2) {
$diff = $key_compare_func($k1, $k2);
//var_dump('k1=' . $k1 . ', k2=' . $k2 . ', diff=' . $diff);
if ($diff === 0) {
$arr_matched[$k1] = $v1;
} else {
$arr_unmatched[$k1] = $v1;
}
}
}
if (count($args) <= 3) {
return $arr_matched;
}
array_splice($args, 0, 2, [$arr_unmatched]);
return array_merge($arr_matched, call_user_func_array('_array_intersect_ukey', $args));
}
/*
array_intersect_ukey
string(12) "a=bbb; b=aab"
string(21) "literal comparison: 1"
string(12) "a=bbb; b=ccb"
string(22) "literal comparison: -1"
string(12) "a=abb; b=bbb"
string(22) "literal comparison: -1"
string(12) "a=aab; b=abb"
string(22) "literal comparison: -1"
string(22) "a=aab; b=/[a-z]b[a-z]/"
string(22) "a=abb; b=/[a-z]b[a-z]/"
string(22) "a=abb; b=/c[a-z][a-z]/"
array(0) {
}
_array_intersect_ukey
string(22) "a=aab; b=/[a-z]b[a-z]/"
string(22) "a=bbb; b=/[a-z]b[a-z]/"
string(22) "a=ccb; b=/[a-z]b[a-z]/"
string(22) "a=abb; b=/[a-z]b[a-z]/"
string(22) "a=aab; b=/c[a-z][a-z]/"
string(22) "a=ccb; b=/c[a-z][a-z]/"
array(3) {
["bbb"]=>
string(0) ""
["abb"]=>
string(0) ""
["ccb"]=>
string(0) ""
}*/
?>