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_intersect - 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_key_exists" width="11" height="7"/> <array_intersect_ukey
Last updated: Mon, 05 Feb 2007
view this page in

array_intersect

(PHP 4 >= 4.0.1, PHP 5)

array_intersect — 配列の共通項を計算する

説明

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

array_intersect() は、他の全ての引数に存在する array1 の値を全て有する配列を返します。 キーと値の関係は維持されることに注意してください。

例 232. array_intersect() の例

<?php
$array1
= array("a" => "green", "red", "blue");
$array2 = array("b" => "green", "yellow", "red");
$result = array_intersect($array1, $array2);
?>

上の例の出力は以下となります。

Array
(
   [a] => green
   [0] => red
)

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

array_intersect_assoc()array_diff() および array_diff_assoc() も参照ください。



add a note add a note User Contributed Notes
array_intersect
aaron
18-Dec-2006 02: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 08: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 01: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
08-Feb-2006 12: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 11: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
11-Jun-2005 05: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
19-May-2005 03: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 12: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 09: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 10: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 01: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
10-Jan-2004 06: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
10-Dec-2003 03: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 10: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 07: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 08: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.

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