PHP 8.3.4 Released!

array_intersect_assoc

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

array_intersect_assocDizilerin kesişimini hesaplarken ek olarak indisleri de karşılaştırır

Açıklama

array_intersect_assoc(array $dizi, array ...$diziler): array

array_intersect_assoc() işlevi tüm bağımsız değişkenlerinde mevcut olan dizi değerlerini içeren bir dizi döndürür. array_intersect() işlevinin aksine karşılaştırmada anahtarların kullanıldığına dikkat ediniz.

Bağımsız Değişkenler

dizi

Diğer dizilerin karşılaştırılacağı ilk dizi.

diziler

Değerleri ilk dizi ile karşılaştırılacak diğer diziler.

Dönen Değerler

Tüm bağımsız değişkenlerde mevcut dizi değerlerini içeren ilişkisel bir dizi döndürür.

Sürüm Bilgisi

Sürüm: Açıklama
8.0.0 Bu işlev artık yalnızca tek bir bağımsız değişken ile çağrılabiliyor. Evvelve en az iki bağımsız değişken gerekirdi.

Örnekler

Örnek 1 - array_intersect_assoc() örneği

<?php
$array1
= array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "b" => "yellow", "blue", "red");
$result_array = array_intersect_assoc($array1, $array2);
print_r($result_array);
?>

Yukarıdaki örneğin çıktısı:

Array
(
    [a] => green
)

Örnekte gördüğünüz gibi her iki dizide de sadece "a" => "green" ortak olduğundan dönen dizi sadece bu elemanı içermektedir. "red" değerinin döndürülmeme sebebi birinci dizide indisi 0 iken ikinci dizide 1 olmasıdır. "b" değerinin döndürülmeme sebebi de değerinin her dizide farklı olmasıdır.

İki elemanın eşit olması için sadece ve sadece (string) $elem1 === (string) $elem2 olmalıdır. Başka bir deyişle, elemanların dizgesel gösterimleri aynı olmalıdır.

Ayrıca Bakınız

  • array_intersect() - Dizilerin kesişimini hesaplar
  • array_uintersect_assoc() - Veriyi bir geriçağırım işleviyle karşılaştırarak dizilerin kesişimini hesaplarken ek olarak indislere de bakar
  • array_intersect_uassoc() - Dizilerin kesişimini hesaplarken ek olarak bir geriçağırım işlevi üzerinden indisleri de karşılaştırır
  • array_uintersect_uassoc() - Değerleri ve indisleri farklı geriçağırım işlevleriyle karşılaştırarak dizilerin kesişimini hesaplarken ek olarak indislere de bakar
  • array_diff() - Dizilerin farkını hesaplar
  • array_diff_assoc() - Dizilerin farkını hesaplarken ek olarak indisleri de karşılaştırır
add a note

User Contributed Notes 4 notes

up
6
Whitend
11 years ago
One of the ways to get intersection of two arrays is as follows:

<?php
function arrayIntersect( $primary_array, $secondary_array ) {

if ( !
is_array( $primary_array ) || !is_array( $secondary_array ) ) {
return
false;
}

if ( !empty(
$primary_array ) ) {

foreach(
$primary_array as $key => $value ) {

if ( !isset(
$secondary_array[$key] ) ) {
unset(
$primary_array[$key] );
} else {
if (
serialize( $secondary_array[$key] ) != serialize( $value ) ) {
unset(
$primary_array[$key] );
}
}

}

return
$primary_array;

} else {
return array();
}

}
?>

It would pay attention to both keys and values even if values would be arrays as well. One important note is that if value of $primary_array is yet another array, its order of key & value pairs becomes important for matching.
up
4
vandor at progressive dot hu
19 years ago
# ket tomb kulcs alapu metszetet szamitja ki, az erteken is ellenorzest vegez
#
# calculating (key base) intersection of arrays (value are checked)
# use: $result_array = array_intersect_assoc($a1, $a2, $a3,..);
#
##
# original code by [jochem at iamjochem dawt com] : array_diff_keys()

<?php
function array_intersect_assoc() {

$args = func_get_args();
$res = $args[0];

for (
$i=1;$i<count($args);$i++) {
if (!
is_array($args[$i])) {continue;}

foreach (
$res as $key => $data) {
if ( (!
array_key_exists($key, $args[$i])) || ( (isset($args[$i][$key])) && ($args[$i][$key] !== $res[$key]) ) ) {
unset(
$res[$key]);
}
}
}

return
$res;
}

?>

<?php
$array1
= array("a"=>"green", "b"=>"brown", "c"=>"blue", "red");
$array2 = array("a"=>"green", "b"=>"yellow", "c"=>"yellow", "red");
$a = array('a'=>'green', 'b'=>'brown', 'c'=>'yellow');
$b = array('a'=>'green', 'b'=>'brown', 'c'=>'yellow', 'e'=>'yellow');

$result_array = array_intersect_assoc($a, $b, $array1, $array2);
?>

$args array will look like:

(
0 =>
(
a => green
b => brown
c => yellow
)

1 =>
(
a => green
b => brown
c => yellow
e => yellow
)

2 =>
(
a => green
b => brown
c => blue
0 => red
)

3 =>
(
a => green
b => yellow
c => yellow
0 => red
)

)

$result_array will look like:

(
a => green
)
up
-6
Jim Yaghi
6 years ago
Remember, null values will be interpreted as, "key does not exist." eg,

$a = ['apples' => 1, 'oranges' => 2, 'turtles' => null, 'bananas'=>4];
$b = ['apples'=>10, 'turtles' => 11, 'eggs'=>12];
$c = array_intersect_assoc($b,$a);

You might have expected $c to contain:

['oranges' => 10, 'turtles' => 11]

In fact, 'turtles' has a null value in the $a array, therefore the $c array contains only:

['oranges' => 10]

Something to keep in mind if using array_intersect_assoc to filter valid entries, eg in a mySQL insertion pre-processing or nerdy API that doesn't like extra params.
up
-7
StR: str at strgt dot cjb dot net
18 years ago
To find the keys that are in 2 arrays, without caring of the values:

This is a function i needed, and it also returns the values of the first array

<?php
function array_key_intersect(&$a, &$b) {
$array = array();
while (list(
$key,$value) = each($a)) {
if (isset(
$b[$key]))
$array[$key] = $value;
}
return
$array;
}
?>
To Top