|
array_diff_key
Computes the difference of arrays using keys for comparison
(PHP 5 >= 5.1.0)
Compares the keys from array1 against the keys from array2 and returns the difference. This function is like array_diff() except the comparison is done on the keys instead of the values. Parameters
Return ValuesReturns an array containing all the entries from array1 that are not present in any of the other arrays. ExamplesExample 239. array_diff_key() example
The two keys from the <?php The above example will output: array(2) { Code Examples / Notes » array_diff_keyml
You may obtain this function with PEAR Package PHP_Compat (http://pear.php.net/package/PHP_Compat) Then using such code is quite useful <?php if(!function_exists('array_diff_key')){ require_once 'PHP/Compat/Function/array_diff_key.php'; } ?> ampf
Well, you could implement in the code something more powerfull: http://www.php.net/manual/en/function.array-diff.php#31364 maxence
Seems to be a great function, especially for n-dimensions arrays. The only problem is that I cannot find it in php 5.0.3 and 5.0.4. Does it really exist ?! :( [20:27:05][maxence@conurb] ~/test2/php-5.0.4$ grep PHP_FUNCTION * -r | grep -i array_diff_key [20:27:09][maxence@conurb] ~/test2/php-5.0.4$ kwutzke @ somewhere in the net
PHP4 array_diff_key can be copied from the array_intersect_key implementation posted by some anonymous user on 2006-07-17. The only thing you have to do is to delete the '!' in the if and rename the function.
vlad_mustafin
One more alternative variant :) <? if (!function_exists('array_diff_key')) { function array_diff_key() { $argCount = func_num_args(); $diff_arg_prefix = 'diffArg'; $diff_arg_names = array(); for ($i=0; $i < $argCount; $i++) { $diff_arg_names[$i] = 'diffArg'.$i; $$diff_arg_names[$i] = array_keys((array)func_get_arg($i)); } $diffArrString = ''; if (!empty($diff_arg_names)) $diffArrString = '$'.implode(', $', $diff_arg_names); eval("\$result = array_diff(".$diffArrString.");"); return $result; } } ?> denis noessler
if (!function_exists('array_diff_key')) { /** * Computes the difference of arrays using keys for comparison * * @param array $valuesBase Base elements for comparison, associative * @param array $valuesComp[,..] Comparison elements, associative * * @param array Elements, not existing in comparison element, associative */ function array_diff_key() { $argCount = func_num_args(); $argValues = func_get_args(); $valuesDiff = array(); if ($argCount < 2) { return false; } foreach ($argValues as $argParam) { if (!is_array($argParam)) { return false; } } foreach ($argValues[0] as $valueKey => $valueData) { for ($i = 1; $i < $argCount; $i++) { if (isset($argValues[$i][$valueKey])) { continue 2; } } $valuesDiff[$valueKey] = $valueData; } return $valuesDiff; } } 2ge
Hello, if you need diff key of n-dimensional arrays here is nice solution: <?php function n_array_diff ($a1, $a2) { foreach($a1 as $k => $v) { $r[$k] = is_array($v) ? n_array_diff($a1[$k], $a2[$k]) : array_diff_key($a1, $a2); } return $r; } ?> it will print everything, what is missing in $a2. nicolas
Be aware that the last solution doesn't work if for any reason, two values are the same.
contact
after kwutzke's comment , here is a PHP4 array_diff_key fonction for those in need function PHP4_array_diff_key() { $arrs = func_get_args(); $result = array_shift($arrs); foreach ($arrs as $array) { foreach ($result as $key => $v) { if (array_key_exists($key, $array)) { unset($result[$key]); } } } return $result; } works for me, enjoy. eric dot broersma
<?php function array_diff_key() { $args = func_get_args(); return array_flip(call_user_func_array('array_diff', array_map('array_flip',$args))); } ?> |
Change Languagearray_change_key_case array_chunk 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_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 krsort ksort list natcasesort natsort next pos prev range reset rsort shuffle sizeof sort uasort uksort usort |