No because that only does a one-way comparison. It only tells me what's
missing from $array2. I need it from both arrays. That's why I'm comparing
1 versus 2, then 2 versus 1, and then doing a merge/unique on the result.
$array1 = array(1, 2, 3, 4, 5, 6);
$array2 = array(1, 3, 2, 8, 9);
$result = array_diff(array_unique($array1 + $array2),
array_intersect($array1, $array2));
=> (4, 5, 6)
Versus:
$array1 = array(1, 2, 3, 4, 5, 6);
$array2 = array(1, 3, 2, 8, 9);
$diff1 = array_diff($array1, $array2);
$diff2 = array_diff($array2, $array1);
$result = array_unique(array_merge($diff1, $diff2));
=> (4, 5, 6, 8, 9)
This second $result is what I want. So far I haven't noticed any problems
doing it this way ... yet. I'm sure someone will tell me otherwise.
Ash
> -----Original Message-----
> From: Ryan Sun [mailto:[email protected]]
> Sent: Wednesday, April 14, 2010 8:45 AM
> To: [email protected]
> Cc: Ashley M. Kirchner; [email protected]
> Subject: Re: [PHP] Array differences
>
> Maybe this one works?
> array_diff(array_unique($array1 + $array2), array_intersect($array1,
> $array2))
>
> On Wed, Apr 14, 2010 at 4:39 AM, Ashley Sheridan
> <[email protected]> wrote:
> > On Tue, 2010-04-13 at 23:01 -0600, Ashley M. Kirchner wrote:
> >
> >> I have the following scenario:
> >>
> >>
> >>
> >> $array1 = array("12", "34", "56", "78", "90");
> >>
> >> $array2 = array("12", "23", "56", "78", "89");
> >>
> >>
> >>
> >> $result = array_diff($array1, $array2);
> >>
> >>
> >>
> >> print_r($result);
> >>
> >>
> >>
> >>
> >>
> >> This returns:
> >>
> >>
> >>
> >> Array
> >>
> >> (
> >>
> >> [1] => 34
> >>
> >> [4] => 90
> >>
> >> )
> >>
> >>
> >>
> >>
> >>
> >> However what I really want is a two-way comparison. I want elements
> that
> >> don't exist in either to be returned:
> >>
> >>
> >>
> >> 34 and 90 because they don't exist in $array2, AND 23 and 89 because
> they
> >> don't exist in $array1. So, is that a two step process of first
> doing an
> >> array_diff($array1, $array2) then reverse it by doing
> array_diff($array2,
> >> $array1) and merge/unique the results? Any caveats with that?
> >>
> >>
> >>
> >> $array1 = array("12", "34", "56", "78", "90");
> >>
> >> $array2 = array("12", "23", "56", "78", "89");
> >>
> >>
> >>
> >> $diff1 = array_diff($array1, $array2);
> >>
> >> $diff2 = array_diff($array2, $array1);
> >>
> >>
> >>
> >> $result = array_unique(array_merge($diff1, $diff2));
> >>
> >>
> >>
> >> print_r($result);
> >>
> >>
> >>
> >>
> >>
> >> -- A
> >>
> >
> >
> > I don't see any problems with doing it that way. This will only work
> as
> > you intended if both arrays have the same number of elements I
> believe,
> > otherwise you might end up with a situation where your final array
> has
> > duplicates of the same number:
> >
> > $array1 = $array(1, 2, 3, 4, 5, 6);
> > $array2 = $aray(1, 3, 2, 5);
> >
> > Thanks,
> > Ash
> > http://www.ashleysheridan.co.uk
> >
> >
> >
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php