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

search for in the

array_intersect_uassoc> <array_intersect_assoc
Last updated: Fri, 14 Nov 2008

view this page in

array_intersect_key

(PHP 5 >= 5.1.0)

array_intersect_keyComputa a interseção de array comparando pelas chaves

Descrição

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

array_intersect_key() retorna um array contendo todos os valores de array1 que tem as mesmas chaves presentes em todos os argumentos.

Parâmetros

array1

O array com as chaves a serem verificadas.

array2

Um array para comparar as chaves.

array

Uma variável lista de arrays para comparação.

Valor Retornado

Retorna um array associativo contendo todos os valores de array1 que estão presentes em todos os argumentos.

Exemplos

Exemplo #1 Exemplo da 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));
?>

O exemplo acima irá imprimir:

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

Em nosso exemplo você pode ver que somente as chaves 'blue' e 'green' estão presentes em ambos array e assim retornado. Também note que os valores das chaves 'blue' e 'green' diferem nos dois arrays. A combinação ocorre porque somente as chaves são verificadas. Os valores retornados são do array1 .

As duas chaves do par key => value são considerados iguais somente se (string) $key1 === (string) $key2 . Em outras palavras um verificação do tipo é executada, então a representação string precisa ser a mesma.



array_intersect_uassoc> <array_intersect_assoc
Last updated: Fri, 14 Nov 2008
 
add a note add a note User Contributed Notes
array_intersect_key
CBWhiz at gmail dot com
04-Jan-2008 02:04
I have found the following helpful:
<?PHP
function array_merge_default($default, $data) {
       
$intersect = array_intersect_key($data, $default); //Get data for which a default exists
       
$diff = array_diff_key($default, $data); //Get defaults which are not present in data
       
return $diff + $intersect; //Arrays have different keys, return the union of the two
}
?>
It's use is like both of the functions it uses, but keeps defaults and _only_ defaults. It's designed for key arrays, and i'm not sure how it will work on numeric indexed arrays.

Example:
<?PHP
$default
= array(
 
"one" => 1,
 
"two" => 2
);
$untrusted = array(
 
"one" => 42,
 
"three" => 3
);
var_dump(array_merge_default($default, $untrusted));

array(
2) {
  [
"two"]=>
 
int(2)
  [
"one"]=>
 
int(42)
}

?>
Rod Byrnes
05-May-2007 09:10
Here is a faster version than those shown below, with optimisation for the case when only two arrays are passed. In my tests with a 10000 item first array and a 5000 item second array (run 20 times) this function ran in 1.89 seconds compared with 2.66 for the version posted by dak. For a three array case, same as above but with the third array containing 3333 values, the timing is 3.25 for this version compared with 3.7 for dak's version.

<?php
if (!function_exists('array_intersect_key'))
{
  function
array_intersect_key($isec, $keys)
  {
   
$argc = func_num_args();
    if (
$argc > 2)
    {
      for (
$i = 1; !empty($isec) && $i < $argc; $i++)
      {
       
$arr = func_get_arg($i);
        foreach (
array_keys($isec) as $key)
        {
          if (!isset(
$arr[$key]))
          {
            unset(
$isec[$key]);
          }
        }
      }
      return
$isec;
    }
    else
    {
     
$res = array();
      foreach (
array_keys($isec) as $key)
      {
        if (isset(
$keys[$key]))
        {
         
$res[$key] = $isec[$key];
        }
      }
      return
$res;
    }
  }
}
?>
17-Jul-2006 05:31
Here it is a more obvious way to implement the function:

if (!function_exists('array_intersect_key')) {
    function array_intersect_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;
   }
}
Anton Backer
30-Mar-2006 11:49
Jesse: no, array_intersect_key does not accomplish the same thing as what you posted:

array_flip (array_intersect (array_flip ($a), array_flip ($b)))

because when the array is flipped, values become keys. having duplicate values is not a problem, but having duplicate keys is. array_flip resolves it by keeping only one of the duplicates and discarding the rest. by the time you start intersecting, you've already lost information.
dak
23-Jan-2006 08:31
A more efficient (and, I think, simpler) compatibility implementation:

<?php
if (!function_exists('array_intersect_key'))
{
    function
array_intersect_key ($isec, $arr2)
    {
       
$argc = func_num_args();
        
        for (
$i = 1; !empty($isec) && $i < $argc; $i++)
        {
            
$arr = func_get_arg($i);
            
             foreach (
$isec as $k =>& $v)
                 if (!isset(
$arr[$k]))
                     unset(
$isec[$k]);
        }
       
        return
$isec;
    }
}
?>
Silvio Ginter
23-Sep-2005 05:17
Based on the code posted by gaylord dot aulke at 100days.de
i wrote this one. This should implement this function in all versions equal or greater than PHP 4.0

function array_intersect_key($arr1, $arr2) {
    $res = array();
    foreach($arr1 as $key=>$value) {
        $push = true;
        for ($i = 1; $i < func_num_args(); $i++) {
            $actArray = func_get_arg($i);
            if (gettype($actArray) != 'array') return false;
            if (!array_key_exists($key, $actArray)) $push = false;
        }
        if ($push) $res[$key] = $arr1[$key];
    }
    return $res;
}
gaylord dot aulke at 100days.de
04-Jul-2005 04:04
I tried to use this function with PHP 5.0.4 under windows but the function does not seem to be implemented.
(Fatal error: Call to undefined function array_intersect_key())

This works as a workaround for 2 arrays at least:

function array_intersect_key($arr1, $arr2) {
  $res = array();
  foreach($arr1 as $key=>$value) {
    if(array_key_exists($key, $arr2)) $res[$key] = $arr1[$key];
  }
  return $res;
}
aidan at php dot net
29-May-2005 08:51
This functionality is now implemented in the PEAR package PHP_Compat.

More information about using this function without upgrading your version of PHP can be found on the below link:

http://pear.php.net/package/PHP_Compat

array_intersect_uassoc> <array_intersect_assoc
Last updated: Fri, 14 Nov 2008
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites