From: "Ashley M. Kirchner" on 14 Apr 2010 10:29 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 14 Apr 2010 10:45 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 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 14 Apr 2010 11:37 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 > 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 14 Apr 2010 12:14 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 14 Apr 2010 12:20 > -----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 First  |  Prev  |  Next  |  Last