Sreeja
Sreeja

Reputation: 151

I have two arrays.I want to check which is the common element in php

Imgagining i have two array

arr[]={"red","blue","green"}
arr2[]={"red","violet","black"}

How will i compare the two array to get the result that i common to both of the arrays..

For this the result is red...

How wil i do this in php(simple means)...Can anyone suggest???

Upvotes: 1

Views: 226

Answers (2)

Bob Fincheimer
Bob Fincheimer

Reputation: 18066

To put it quick:

http://php.net/manual/en/function.array-intersect.php

The function takes multiple array and returns an array with ONLY elements that are in every single array.

Multidimensional

This snippet takes all the multidimensional arrays and UNIONS the array together before INTERSECTING the results: ($multi1[0] U $multi1[1] U ... U $multi1[n]) INTERSECT ($multi2[0] U $multi2[1] U ... U $multi2[m]):

$result = null;
foreach(array($multi1, $multi2, $multi3) as $multi) {
    $merge = array();
    foreach($multi as $array) {
      $merge = array_merge($merge, $array);
    }
    if($result == null) {
      $result = $merge;
    } else {
      $result = array_intersect($merge, $result);
    }
}

This snippet takes all the multidimensional arrays and UNIONS the array together before INTERSECTING the results: ($multi1[0] INTERSECT $multi1[1] INTERSECT ... INTERSECT $multi1[n]) INTERSECT ($multi2[0] INTERSECT $multi2[1] INTERSECT ... INTERSECT $multi2[m]):

$result_all = null;
foreach(array($multi1, $multi2, $multi3) as $multi) {
    $result = null;
    foreach($multi as $array) {
      if($result == null) {
        $result = $array;
      } else {
        $result = array_intersect($array, $result);
      }
    }
    if($result_all == null) {
      $result_all = $result;
    } else {
      $result_all = array_intersect($result, $result_all);
    }
}

EDIT - Recursion

To make it simpler to read i made it recursive for the INTERSECT all case:

function array_intersect_multi($arrays, $dim = 1) {
    $result = null;
    foreach($arrays as $array) {
      $tmp = $dim > 1 ? array_intersect_multi($array, $dim - 1) : $array;
      if($result == null) {
        $result = $tmp;
      } else {
        $result = array_intersect($tmp, $result);
      }

    }
    return $result;
}

used like this:

$array1 = array(array('1', '2', '3'), array('3', '5', '0'));
$array2 = array(array('5', '3', '7'), array('3', '7', '8'));
$result = array_intersect_multi(array($array1, $array2), 3);

notice the dimension 3 since the array we are passing in is:

array(
  array(
    array('1', '2', '3'),
    array('3', '5', '0')
  ),
  array(
    array('5', '3', '7'),
    array('3', '7', '8')
  )
)

The result should be:

array('3')

Upvotes: 3

Sarfraz
Sarfraz

Reputation: 382806

Use array_intersect function.

$array1 = array("a" => "green", "red", "blue");
$array2 = array("b" => "violet", "black", "red");
$result = array_intersect($array1, $array2);
print_r($result);

Result:

Array
(
    [0] => red
)

Upvotes: 6

Related Questions