++在URL上以奇怪的方式工作

时间:2016-10-18 18:29:14

标签: php

我正在尝试生成以下网址,但是下面的代码我得到了这个原因?

结果:

$prev = http://domain.co.nz/pages/brand-02 $next = http://domain.co.nz/pages/brand-02

我想要的是什么:

$prev = http://domain.co.nz/pages/brand-01 - Should not be able to go any lower then 01 $next = http://domain.co.nz/pages/brand-02

代码:

<?php

$url = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

$pageSlug = $url;

$prev=$pageSlug--;
echo 'prev = ' .$prev. '<br/>';



echo 'next' . '<br/>' . '<br/>';

$next=$pageSlug++;

echo 'next = ' .$next. '<br/>';

echo '<a href="' .$next.'" > Next</a>';

?>

3 个答案:

答案 0 :(得分:3)

如果您参考手册,您将看到

  

请注意,字符变量可以递增但不会递减,即使只支持纯ASCII字母和数字(a-z,A-Z和0-9)。

这就是为什么

$pageSlug--

无影响$pageSlug保持不变。

虽然你可以增加字符串,代码

$next = $pageSlug++; 

装置

  

$pageSlug分配给$next然后增加$pageSlug

这就是为什么你的两个操作都不起作用的原因。

答案 1 :(得分:1)

由于您正在使用字符串,因此您需要在递增或递减之前提取数字部分。这是一种方法:

<?php

$url = 'testing/.sad/05';

// get any numbers from end of string
$matches = array();
if (preg_match('#(\d+)$#', $url, $matches)) {
    // if we have a match
    $page = $matches[1];
    $prev = substr_replace($url, sprintf('%02d', $page - 1), -strlen($page));
    $next = substr_replace($url, sprintf('%02d', $page + 1), -strlen($page));
} else {
    $prev = $next = null;
}

echo '<pre>';
var_dump(get_defined_vars());
echo '</pre>';

答案 2 :(得分:0)

试试这个,

<?php

$url = (isset($_SERVER['HTTPS']) ? "https" : "http") ."://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

//$pageSlug = $url;

$pageSlug = explode("code-",$url)[0];
$page = explode("code-",$url)[1];
$prev = $page--;
$prev=$pageSlug."code-".$page;
echo 'prev = ' .$prev. '<br/>';
echo 'next' . '<br/>' . '<br/>';
$next = page++;
$next=$pageSlug."code-".$next;
echo 'next = ' .$next. '<br/>';
echo '<a href="' .$next.'" > Next</a>';

?>