From: "Ashley M. Kirchner" on
On 4/14/2010 2:39 AM, Ashley Sheridan wrote:
> On Tue, 2010-04-13 at 23:01 -0600, Ashley M. Kirchner wrote:
>> $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);
>>
>
> 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);

Wouldn't array_unique() take care of that though? Your example
above returns 4 and 6, which would be correct.

A
From: Ryan Sun on
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
<ash(a)ashleysheridan.co.uk> 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
>
>
>
From: "Ashley M. Kirchner" on
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:ryansun81(a)gmail.com]
> Sent: Wednesday, April 14, 2010 8:45 AM
> To: ash(a)ashleysheridan.co.uk
> Cc: Ashley M. Kirchner; php-general(a)lists.php.net
> 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
> <ash(a)ashleysheridan.co.uk> 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
> >
> >
> >

From: lala on
Ashley M. Kirchner wrote:
>
> $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)

Hi Ash,

Isn't the array_unique() unnecessary?

Mike
From: "Ashley M. Kirchner" on
> -----Original Message-----
> From: lala [mailto:lala(a)mail.theorb.net]
> Sent: Wednesday, April 14, 2010 10:15 AM
> To: Ashley M. Kirchner
> Cc: php-general(a)lists.php.net
> Subject: Re: [PHP] Array differences
>
> Ashley M. Kirchner wrote:
> >
> > $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)
>
> Hi Ash,
>
> Isn't the array_unique() unnecessary?
>
> Mike


Thinking about it, it should be unnecessary, but at the same time I want to absolutely sure that I get unique values out of the two diffs.

Ash