Re: Array differences
| From: | Ryan Sun | Date: | Wed, 14 Apr 2010 14:45:02 +0000 |
| Subject: | Re: Array differences | ||
| References: | 1 2 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-304088@lists.php.net to get a copy of this message | ||
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
>
>
>