?
<?php
$pages="1,2,3,4,5,6,7,8,9,10,11,12,13,14";
function foo($x, $pages) {
$pattern = '!
(^|\d+,)
'.$x.'
($|,\d+)
!x';
echo $x, ' | ';
if ( preg_match($pattern, $pages, $c) ) {
echo 'prev: ', substr($c[1], 0, -1), ' | ';
echo 'next: ', substr($c[2], 1);
}
echo "\r\n";
}
for($x=0; $x<16; $x++) {
foo($x, $pages);
}
0 |
1 | prev: | next: 2
2 | prev: 1 | next: 3
3 | prev: 2 | next: 4
4 | prev: 3 | next: 5
5 | prev: 4 | next: 6
6 | prev: 5 | next: 7
7 | prev: 6 | next: 8
8 | prev: 7 | next: 9
9 | prev: 8 | next: 10
10 | prev: 9 | next: 11
11 | prev: 10 | next: 12
12 | prev: 11 | next: 13
13 | prev: 12 | next: 14
14 | prev: 13 | next:
15 |
edit: ( ) ( , , , , - ). - " " - , ? $page "abc, , , xyz"? ( , script , ).
<?php
$pages= array(
'abc',
'thermonuclear',
'the',
'thermopylae',
'xyz'
);
function foo($x, $pages, $offset=0) {
$start = strpos($pages, (string)$x, $offset);
if ( false===$start ) {
return false;
}
else {
$end = $start + strlen($x);
if (
(0!==$start && ','!==$pages[$start-1])
|| ( $end!==strlen($pages) && ','!==$pages[$end])
) {
return foo($x, $pages, $offset+strlen($x));
}
else {
return array(
'previous'=>previousElement($pages, $start),
'current'=>$x,
'next'=>nextElement($pages, $end)
);
}
}
}
function previousElement($str, $offset) {
if ( $offset < 1 ) {
return NULL;
}
else {
$offset-=2;
$tmp = strrpos($str, ',', -(strlen($str)-$offset));
return false===$tmp ? substr($str, 0, $offset+1) : substr($str, $tmp+1, $offset-$tmp);
}
}
function nextElement($str, $offset) {
if ( $offset >= strlen($str) ) {
return NULL;
}
else {
$tmp = strpos($str, ',', $offset+1);
return false===$tmp ? substr($str, $offset+1) : substr($str, $offset+1, $tmp-$offset);
}
}
echo join(',', $pages), "\r\n";
foreach($pages as $p) {
var_export( foo($p, join(',', $pages)) );
echo "\r\n";
}