Re: chunk_split();
| From: | John W. Holmes | Date: | Wed, 28 Jan 2004 17:15:57 +0000 |
| Subject: | Re: chunk_split(); | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-176079@lists.php.net to get a copy of this message | ||
chunk_split();From: Benjamin Trépanier
> I am using the chunk_split(); function to separe a
> long long text on differents pages.
> At this time, I can split the string into x sections of
> 2000 characters.
>
> Now I need to show only the first 2000 .
> when user click on page #2, it's reloading and
> show the next 2000 characters... If he click the page
> 4 button, it's going to the 6000th caracters and it show
> his next 2000.. etc...
>
> How can I split this text on many pages without loosing
> any characters?? Maybe the chunk_split function is not
> the good one...
You'll have to look for the spaces. So you want no more than 2000 characters
per page. If you're on page x, then start at character x*2000 and start
looping backwards character by character until you find a space. Then grab
the text up until that character. "remember" that characters location, too,
as you'll need to use that as your starting point on the next page.
Something like this:
$start = 0;
$chars = 2000;
$page = array();
$x = 0;
$len = strlen($long_text);
while($start < $len)
{
$spot = $start + $chars;
if($spot < $len)
{
while($long_text{$spot--} != ' ') { }
}
else
{ $spot = $len; }
$page[$x]['start'] = $start;
$page[$x]['chars'] = $spot - $start + 1;
$x++;
$start = $spot + 1;
}
Now you'll have your start and number of characters for each page. For
example to show page zero:
echo substr($long_text,$page[0]['start'],$page[0]['chars']);
To show page 5
echo substr($long_text,$page[5]['start'],$page[5]['chars']);
etc. Throw $page into a session variable so you only have to calculate it
once.
Also, if you're pulling this text from a database or file, combine it with
the database and/or file functions so that you only extract/read the part of
the text your after instead of the whole text each time.
Hope that helps.
---John Holmes...