PHP新手在这里..我正在尝试创建一个功能,用户在将项目添加到购物车后重定向回上一页。但是,当使用下面的代码重定向它们时,会留下目录的副本(例如:example.com/catalog/garden-tools/garden-tools
function custom_add_to_cart_redirect() {
$_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$url = explode('/', rtrim($_SERVER['REQUEST_URI_PATH'], '/'));
return $url[3];
}
print_r显示以下内容:
Array ( [0] => [1] => thefarmshop [2] => catalog [3] => garden-tools [4] => gardening-glove )
问题是什么?
答案 0 :(得分:1)
由于url被爆炸,你会得到一个数组:
$url[ 0 ] = "http:"
$url[ 1 ] = "SOME_STRING"
等等。
您需要检查url数组中所需字符串的索引是什么并将其返回。
像return $url[ 2 ]
或索引一样。
<强>更新强>
function custom_add_to_cart_redirect() {
$url = explode('/', substr($_SERVER['HTTP_REQUEST'], 1));
print_r( $url );
}
print_r( $array )
显示$array
结构,包括索引和值。
答案 1 :(得分:0)
对此进行快速简单的测试看起来像
$uri = '/test/uri/just/cause/';
print_r(explode('/', $uri));
你会看到同样的事情:
Array
(
[0] =>
[1] => test
[2] => uri
[3] => just
[4] => cause
[5] =>
)
您将数组元素0视为空的原因是由于爆炸的方式起作用。它需要一个字符,并将它前面的内容粘贴到一个数组元素中,以及在另一个数组元素中后面的内容。例如,一个/两个将被分割为数组(一,二),因为一个在斜杠(/)之前,两个在之后(如预期的那样)
但是,如果之前或之后没有任何内容,您将获得一个空元素,如上例所示。
在你的代码中使用rtrim()来修剪尾部斜杠,但是如果你只是使用trim()来修剪前导斜杠和尾部斜杠,你会得到更好的结果。
$url = explode('/', trim($_SERVER['REQUEST_URI_PATH'], '/'));
为了您的回归,您可能会寻找
return $uri[count($uri) - 2];
这将带你从example.com/catalog/garden-tools/gardening-glove和return garden-tools
更新: 或许对你来说更简单的方法如下
$uri = rtrim($_SERVER['REQUEST_URI_PATH'], '/');
$uri = substr($uri, 0, strrpos($uri, '/'));
这将采用例如example.com/catalog/garden-tools/gardening-glove之类的路径并切掉最后一位,离开example.com/catalog/garden-tools