kevtrout
kevtrout

Reputation: 4984

How to compare two arrays and remove matching elements from one for the next loop?

How else might you compare two arrays ($A and $B )and reduce matching elements out of the first to prep for the next loop over the array $A?

$A = array(1,2,3,4,5,6,7,8);
$B = array(1,2,3,4);

$C = array_intersect($A,$B);  //equals (1,2,3,4)
$A = array_diff($A,$B);       //equals (5,6,7,8)

Is this the simplest way or is there a way to use another function that I haven't thought of? My goal is to have an array that I can loop over, pulling out groups of related content (I have defined those relationships elsewhere) until the array returns false.

Upvotes: 21

Views: 38828

Answers (5)

rg88
rg88

Reputation: 20977

You've got it. Just use array_diff or array_intersect. Doesn't get much easier than that.

Edit: For example:

$arr_1 = array_diff($arr_1, $arr_2);
$arr_2 = array_diff($arr_2, $arr_1);

Source

Upvotes: 27

Kalpesh Bhaliya
Kalpesh Bhaliya

Reputation: 71

Dear easy and clean way

$clean1 = array_diff($array1, $array2); 
$clean2 = array_diff($array2, $array1); 
$final_output = array_merge($clean1, $clean2);

Upvotes: 7

Ashfaq Hussain
Ashfaq Hussain

Reputation: 73

Try to this

$a = array(0=>'a',1=>'x',2=>'c',3=>'y',4=>'w');
$b = array(1=>'a',6=>'b',2=>'y',3=>'z');
$c = array_intersect($a, $b);

$result = array_diff($a, $c);
print_r($result);

Upvotes: -1

rg88
rg88

Reputation: 20977

Hey, even better solution: array _ uintersect. This let's you compare the arrays as per array_intersect but then it lets you compare the data with a callback function.

Upvotes: 0

warren
warren

Reputation: 33435

See also array_unique. If you concatenate the two arrays, it will then yank all duplicates.

Upvotes: 2

Related Questions