|
Posted by Rik on 12/15/06 11:23
Toby Inkster wrote:
> laredotornado@zipmail.com wrote:
>
>> $list1 = "2,26,345";
>> $list2 = "3,4,26,35,525";
>>
>> I am wondering if there is a short way of determining if all the
>> numbers in $list1 occur in $list2.
>
> Fast or easy?
>
> Easy:
>
> $arr1 = explode(',', $list1);
> $arr2 = explode(',', $list2);
> $allin = TRUE;
> foreach ($arr1 as $n)
> {
> if (!in_array($n, $arr2))
> {
> $allin = FALSE;
> break 1;
> }
> }
> // $allin is now TRUE iff every number in $list1 is in $list2.
>
> Fast:
>
> /***************************************************************
> * We exploit the fact that $list1 and $list2 are sorted lists.
> * This will speed things up, but will only be noticeable when
> * dealing with lists of many hundreds of numbers.
> ***************************************************************/
> $arr1 = explode(',', $list1);
> $arr2 = explode(',', $list2);
> $allin = TRUE;
> while (isset($arr1[0]))
> {
> $n = (int)array_shift($arr1);
> while ((int)$arr2[0] < $n)
> array_shift($arr2);
> if ((int)$arr2[0]>$n)
> {
> $allin = FALSE;
> break 1;
> }
> }
Well, and now ths short code version (not more efficient (only if you
needed the difference)):
$difference = array_diff(explode(',',$list1),explode(',',$list2));
if(count($difference)==0){
echo 'Every item in $list1 is in $list2.';
} else {
echo 'The following numbers are not present in $list2: '.implode(',
',$difference);
}
--
Rik Wasmus
Navigation:
[Reply to this message]
|