RE: [PHP] Array differences

From: Date: Wed, 14 Apr 2010 15:37:45 +0000
Subject: RE: [PHP] Array differences
References: 1 2 3  Groups: php.general 
Request: Send a blank email to php-general+get-304089@lists.php.net to get a copy of this message
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@gmail.com] > Sent: Wednesday, April 14, 2010 8:45 AM > To: ash@ashleysheridan.co.uk > Cc: Ashley M. Kirchner; php-general@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@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 > > > > > >

« previous php.general (#304089) next »