我希望制作一个小脚本来理解我输入的网址分页并永远推进分页。
我的输入示例,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?
}
}
答案 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>";
}
}
?>