suche nach in der

array_key_exists> <array_intersect_ukey
Last updated: Fri, 18 May 2012

view this page in

array_intersect

(PHP 4 >= 4.0.1, PHP 5)

array_intersectErmittelt die Schnittmenge von Arrays

Beschreibung

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

array_intersect() gibt ein Array mit allen Werten von array1, die auch in allen anderen Argumenten enthalten sind, zurück. Beachten Sie, dass die Schlüssel erhalten bleiben.

Beispiel #1 array_intersect() Beispiel

<?php
$array1 
= array("a" => "grün""rot""blau");
$array2 = array("b" => "grün""gelb""rot");
$result array_intersect($array1$array2);
?>

Danach enthält $result

Array
(
    [a] => grün
    [0] => rot
)

Hinweis: Zwei Elemente werden nur dann als gleich angesehen, wenn (string) $elem1 === (string) $elem2. In Worten: Wenn die String-Repräsentation die gleiche ist.

Siehe auch array_intersect_assoc(), array_diff() und array_diff_assoc().



add a note add a note User Contributed Notes
array_intersect
aaron
17-Dec-2006 06:36
this one will work with associative arrays.  also an overwrite function to only replace those elements in the first array.

<?php

function array_union()
{
    if (
func_num_args() < 2) { return; }
   
$arrays = func_get_args();
   
$outputArray = array_shift($arrays);
   
$remaining = count($arrays);
    for (
$i=0; $i<$remaining; $i++)
    {
       
$nextArray = $arrays[$i];
        foreach (
$nextArray as $key=>$value)
        {
           
$outputArray[$key] = $value;
        }
    }
    return
$outputArray;
}

function
array_overwrite()
{
    if (
func_num_args() < 2) { return; }
   
$arrays = func_get_args();
   
$outputArray = array_shift($arrays);
   
$remaining = count($arrays);
    for (
$i=0; $i<$remaining; $i++)
    {
       
$nextArray = $arrays[$i];
        foreach (
$nextArray as $key=>$value)
        {
            if (
array_key_exists($key, $outputArray)) {    $outputArray[$key] = $value; }
        }
    }
    return
$outputArray;
}

?>
Niels
20-Sep-2006 01:53
Here is a array_union($a, $b):

<?php
                                       
//  $a = 1 2 3 4
   
$union =                            //  $b =   2   4 5 6
       
array_merge(
           
array_intersect($a, $b),    //         2   4
           
array_diff($a, $b),         //       1   3
           
array_diff($b, $a)          //               5 6
       
);                              //  $u = 1 2 3 4 5 6
?>
nthitz at gmail dot com
09-Jun-2006 06:09
I did some trials and if you know the approximate size of the arrays then it would seem to be a lot faster to do this <?php array_intersect($smallerArray, $largerArray); ?> Where $smallerArray is the array with lesser items. I only tested this with long strings but I would imagine that it is somewhat universal.
terry(-at-)shuttleworths(-dot-)net
07-Feb-2006 04:42
I couldn't get array_intersect to work with two arrays of identical objects, so I just did this:

foreach ($firstarray as $key=>$value){
    if (!in_array($value,$secondarray)){
        unset($firstarray[$key]);
    }
}

This leaves $firstarray as the intersection.

Seems to work fine & reasonably quickly.
tom p
05-Nov-2005 03:54
If you store a string of keys in a database field and want to match them to a static array of values, this is a quick way to do it without loops:

<?

$vals
= array("Blue","Green","Pink","Yellow");
$db_field = "0,2,3";

echo
implode(", ", array_flip(array_intersect(array_flip($vals), explode(",", $db_field))));

// will output "Blue, Pink, Yellow"

?>
sapenov at gmail dot com
10-Jun-2005 10:11
If you need to supply arbitrary number of arguments
to array_intersect() or other array function,
use following function:

$full=call_user_func_array('array_intersect', $any_number_of_arrays_here);
SETS INTERSECTION
18-May-2005 08:19
$a = array(1,2,3,4,5,2,6,1);  /* repeated elements --> $a is not a set */
$b = array(0,2,4,6,8,5,7,9,2,1);  /* repeated elements --> $b is not a set */

$ua = array_merge(array_unique($a));  /* now, $a is a set */
$ub = array_merge(array_unique($b));  /* now, $b is a set */

$intersect = array_merge(array_intersect($ua,$ub));

Note: 'array_merge' removes blank spaces in the arrays.
Note: order doesn't matter.

In one line:

$intersect_a_b = array_merge(array_intersect(array_merge(array_unique($a)), array_merge(array_unique($b))));

Additions/corrections wellcome...

gRiNgO
drew at iws dot co dot nz
22-Apr-2005 05:04
Just a handy tip.

If you want to produce an array from two seperate arrays on their intersects, here you go:

<?

$a
= array("branches","E_SHOP");
$b = array("E_SHOP","Webdirector_1_0");

print
join("/",array_merge(array_diff($a, $b), array_intersect($a, $b), array_diff($b, $a)));

?>

Gives you:

/branches/E_SHOP/Webdirectory_1_0
blu at dotgeek dot org
15-Oct-2004 02:34
Note that array_intersect and array_unique doesnt work well with multidimensional arrays.
If you have, for example,

<?php

$orders_today
[0] = array('John Doe', 'PHP Book');
$orders_today[1] = array('Jack Smith', 'Coke');

$orders_yesterday[0] = array('Miranda Jones', 'Digital Watch');
$orders_yesterday[1] = array('John Doe', 'PHP Book');
$orders_yesterday[2] = array('Zé da Silva', 'BMW Car');

?>

and wants to know if the same person bought the same thing today and yesterday and use array_intersect($orders_today, $orders_yesterday) you'll get as result:

<?php

Array
(
    [
0] => Array
        (
            [
0] => John Doe
           
[1] => PHP Book
       
)

    [
1] => Array
        (
            [
0] => Jack Smith
           
[1] => Coke
       
)

)

?>

but we can get around that by serializing the inner arrays:
<?php

$orders_today
[0] = serialize(array('John Doe', 'PHP Book'));
$orders_today[1] = serialize(array('Jack Smith', 'Coke'));

$orders_yesterday[0] = serialize(array('Miranda Jones', 'Digital Watch'));
$orders_yesterday[1] = serialize(array('John Doe', 'PHP Book'));
$orders_yesterday[2] = serialize(array('Zé da Silva', 'Uncle Tungsten'));

?>

so that array_map("unserialize", array_intersect($orders_today, $orders_yesterday)) will return:

<?php

Array
(
    [
0] => Array
        (
            [
0] => John Doe
           
[1] => PHP Book
       
)

)

?>

showing us who bought the same thing today and yesterday =)

[]s
tompittlik at disfinite dot net
24-Jun-2004 03:27
Just a small mod to ben's code to make it work properly:

<?php

if(sort(array_unique($b + $a)) === sort($b))
 
// $a is legit
}

?>

This is useful for checking for illegal characters in a username.
t dot wiltzius at insightbb dot com
24-Jun-2004 06:33
I needed to compare an array with associative keys to an array that contained some of the keys to the associative array. Basically, I just wanted to return only a few of the entries in the original array, and the keys to the entries I wanted were stored in another array. This is pretty straightforward (although complicated to explain), but I couldn't find a good function for comparing values to keys. So I wrote this relatively straightforward one:

<?php

function key_values_intersect($values,$keys) {
   foreach(
$keys AS $key) {
     
$key_val_int[$key] = $values[$key];
      }
   return
$key_val_int;
   }

$big = array("first"=>2,"second"=>7,"third"=>3,"fourth"=>5);
$subset = array("first","third");

print_r(key_values_intersect($big,$subset));

?>

This will return:

Array ( [first] => 2 [third] => 3 )
anbolb at boltblue dot com
09-Jan-2004 10:11
This is also handy for testing an array for one of a series of acceptable elements. As a simple example, if you're expecting the query string to contain one of, say, user_id, order_id or item_id, to find out which one it is you could do this:

<?php
    $valid_ids
= array ('user_id', 'item_id', 'order_id');
    if (
$id = current (array_intersect ($valid_ids, array_keys ($_GET))))
    {
       
// do some stuff with it
   
}
    else
       
// error - invalid id passed, or none at all
?>

...which could be useful for constructing an SQL query, or some other situation where testing for them one by one might be too clumsy.
ben at kazez dot com
09-Dec-2003 07:49
To check whether an array $a is a subset of array $b, do the following:

<?php
if(array_unique($b + $a) === $b)
//...
?>

Actually, PHP ought to have a function that does this for you. But the above example works.
Alessandro Ranellucci alex at primafila dot net
16-Jul-2003 03:35
array_intersect($array1, $array2);
returns the same as:
array_diff($array1, array_diff($array1, $array2));
"inerte" is my hotmail.com username
27-Jun-2003 12:50
If you have a slow database query that uses JOIN, try to array_intersect() the table records.

I hung up my server countless times before using this function. Simple select from one table and put the records in an array ($records_1), then select records from any other table and put them in another array($records_2).

array_intersect() will emulate a JOIN for you.

<?php
$emulated_join
= array_intersect($records_1, $records_2);
?>

Remember to test if it really offers a speed improvement, your mileage may vary (database type, hardware, version, etc...)

You could also emulate a JOIN from two text files, reading each line with the file() function.
david at audiogalaxy dot com
10-Apr-2001 01:54
Note that array_intersect() considers the type of the array elements when it compares them.

If array_intersect() doesn't appear to be working, check your inputs using var_dump() to make sure you're not trying to intersect an array of integers with an array of strings.

array_key_exists> <array_intersect_ukey
Last updated: Fri, 18 May 2012