Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
PHP: array_diff_key - Manual
[go: Go Back, main page]

PHP
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | my php.net

search for in the

array_diff_uassoc" width="11" height="7"/> <array_diff_assoc
Last updated: Mon, 05 Feb 2007
view this page in

array_diff_key

(PHP 5 >= 5.1.0)

array_diff_key — キーを基準にして配列の差を計算する

説明

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

array_diff_key() は、array1 から他の引数の配列の中に現れない全ての値を含む配列を返します。 キーと値の関係は維持されることに注意してください。この関数は array_diff() に似ていますが、 値ではなくキーを用いて比較するという点が異なります。

例 218. 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)
}

    

二つの要素は、(string) $elem1 === (string) $elem2 の場合のみ等しいと見なされます。言い換えると、 文字列表現が同じ場合となります。

注意: この関数は n 次元配列の一つの次元しかチェックしないことに注意してください。 もちろん、array_diff_key($array1[0], $array2[0]); のようにすることでより深い次元でのチェックもできます。

array_diff()array_udiff()array_diff_assoc()array_diff_uassoc()array_udiff_assoc()array_udiff_uassoc()array_diff_ukey()array_intersect()array_intersect_assoc()array_intersect_uassoc()array_intersect_key() および array_intersect_ukey() も参照ください。



add a note add a note User Contributed Notes
array_diff_key
kwutzke @ somewhere in the net
20-Dec-2006 09:27
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.
2ge at 2ge dot us
08-Mar-2006 04:28
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.
vlad_mustafin at ukr dot net
14-Jan-2006 12:39
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;
   }
}
?>
ampf at egp dot up dot pt
26-Nov-2005 05:55
Well, you could implement in the code something more powerfull:

http://www.php.net/manual/en/function.array-diff.php#31364
ml at iceni dot pl
07-Jun-2005 04:52
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';
}
?>
maxence at pontapreta dot net
28-May-2005 02:38
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$
nicolas at goinf dot com
15-Apr-2005 12:28
Be aware that the last solution doesn't work if for any reason, two values are the same.
eric dot broersma at phil dot uu dot nl
05-Mar-2005 11:58
<?php
function array_diff_key()
{
  
$args = func_get_args();
   return
array_flip(call_user_func_array('array_diff',
          
array_map('array_flip',$args)));
}
?>
denis noessler
23-Nov-2004 09:07
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;
   }
}

 
show source | credits | sitemap | contact | advertising | mirror sites