note 47880 deleted from function.substr by aidan
| From: | aidan@php.net | Date: | Tue, 18 Jan 2005 15:40:20 +0000 |
| Subject: | note 47880 deleted from function.substr by aidan | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-83555@lists.php.net to get a copy of this message | ||
Note Submitter: ebe at solidgrooves dot com
----
(final)
here's a useful algorithm for parsing page ranges. it simply does not register ranges like
40-48-54 or nonsensical input, but will register ranges like 38-40 and anything comma delimited.
$pages gives you an array of individual pages in the string.
$pages = '34, 35, 36, 38-40, 40-48-54, sddjhhsdhkadsh, 93, 126';
$pageslen = strlen($pages);
$j = 0;
for ($i=0; $i<=$pageslen; $i++)
{if (ereg('[0-9]', $pages{$i}))
{$numbuff = $numbuff.$pages{$i};}
elseif ($pages{$i} == ',')
{if ($numbuff)
{$page[] = $numbuff;
$numbuff = '';}
}
elseif ($pages{$i} == '-')
{$range[$j][0] = $numbuff;
$numbuff = '';
$i++;
do {
if (ereg('[0-9]',$pages{$i}))
{$numbuff = $numbuff.$pages{$i};}
$i++;
}
while (ereg('[[0-9]', $pages{$i}));
if (ereg('[^,[:space:]]', $pages{$i+1}))
{do
{$i++;}
while (ereg('[^,[:space:]]', $pages{$i}));
$range[$j] = '';
if (!$range)
{$range = '';}
$numbuff = '';
$i--;
}
else {
$range[$j][1] = $numbuff;
$numbuff = '';
$page0 = $range[$j][0];
$page1 = $range[$j][1];
$pagetot = $page1 - $page0 + 1;
$k = 0;
$rangepage = $page0;
while ($k < $pagetot)
{$page[] = $rangepage;
$rangepage++;
$k++;}
$j++;
}
}
}
$page[] = $numbuff;