RE: Array differences

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxx]
> Sent: Wednesday, April 14, 2010 8:45 AM
> To: ash@xxxxxxxxxxxxxxxxxxxx
> Cc: Ashley M. Kirchner; php-general@xxxxxxxxxxxxx
> Subject: Re:  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@xxxxxxxxxxxxxxxxxxxx> 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



[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux