如何制作一个理解分页的脚本

时间:2011-09-19 03:22:37

标签: php pagination

我希望制作一个小脚本来理解我输入的网址分页并永远推进分页。

我的输入示例,2个字符串:

hello14.com/14/oijosij
hello14.com/15/oijosij

脚本应该输出:

hello14.com/14/oijosij
hello14.com/15/oijosij
hello14.com/16/oijosij
hello14.com/17/oijosij
hello14.com/18/oijosij
hello14.com/19/oijosij

永远永远。

它必须能够处理许多网址变体,而不仅仅是这种特殊情况。

如果您查看下面的代码,您会看到我遇到麻烦的地方。 它会检测网址中是否存在分页,但我不知道如何检测分页所在位置的正确位置。 我不能只是爆炸发现的分页号码,这会导致错误,因为我的例子在网址的其他地方也包含了第一个分页号码。

$string1 = "hello14.com/14/oijosij";
$string2 = "hello14.com/15/oijosij";

// match all spans of numbers
preg_match_all("/[0-9]{1,}/", $string1, $out);
preg_match_all("/[0-9]{1,}/", $string2, $out2);

// loop through all spans of numbers found in string 1
for ($loop = 0; $loop < count($out[0]); $loop++) {
  if ($out2[0][$loop] - $out[0][$loop] == 1) {
    echo "we have pagination. ".$out[0][$loop]." and ".$out2[0][$loop];
    // but how can i go about it here?
  }
}

1 个答案:

答案 0 :(得分:0)

我确信必须有一个非常不同且更简单的方法,但我用我所知道的做了我能做的事情

 <?php
    //into an ugly function...
    function get_structure($str1, $str2){
        preg_match_all("/\d+/",$str1, $out1);
        preg_match_all("/\d+/",$str2, $out2);
        $parts = preg_split("/\d+/",$str1);
        $total = count($out1[0]);
        for($i=0;$i<$total;$i++){
            if($out2[0][$i] - $out1[0][$i] == 1){
                $left = "";
                for($j=0;$j<=$i;$j++){
                    $left .= $j == $i ? $parts[$j] : $parts[$j].$out1[0][$j];
                }
                $right = "";
                for($j=$i+1;$j<=$total;$j++){
                    $right .= $j == $total ? $parts[$j] : $parts[$j].$out1[0][$j];
                }
                return array($left, $right, $out2[0][$i]);
            }   
        }
        return false;
    }


    //using it
    $str1 = "13hello1415duh.com/2011/13/yay";
    $str2 = "13hello1415duh.com/2011/14/yay";
    if($parts = get_structure($str1, $str2)){
        list($left,$right,$number) = $parts;
        while($number < 30){ //it has to stop..
            $number++;
            echo $left.$number.$right."<br>";
        }
    }
?>