|
Posted by Toby Inkster on 12/15/06 10:03
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;
}
}
// $allin is now TRUE iff every number in $list1 is in $list2.
--
Toby A Inkster BSc (Hons) ARCS
Contact Me ~ http://tobyinkster.co.uk/contact
Navigation:
[Reply to this message]
|