如果我有这个网址:node/95/pdf/1
。我怎样才能获得数值/值1?尝试了parse_url,但给了我错误的输出。
PS:值1只是一个例子,id是动态的,取决于用户点击的内容。
答案 0 :(得分:3)
你可以这样做:
$id = end(explode('/', 'node/95/pdf/1'));
示例:强>
$arr = explode('/', 'node/95/pdf/1');
$id = end($arr);
echo $id; // 1
答案 1 :(得分:3)
我会使用sscanf
未经测试的例子:
list($node_id, $pdf_id) = sscanf($url, "node/%d/pdf/%d");
$node_id
包含节点ID,$pdf_id
包含pdf ID。根据你的评论:是的,你可以输出例如echo $pdf_id;
。
如果您需要在数组中同时使用它们,则可以删除list()
方法,如下所示:
$ids = sscanf($url, "node/%d/pdf/%d");
。
这会在$ids
中返回一个包含node和pdf id的数组。
最后,如果您只需要pdf ID,则可以
$id = sscanf($url, "node/95/pdf/%d");
。
我刚刚展示了如何获取两者,因为我认为你可能需要你的网址中的两个数字。
修改强>
在发布我的解决方案后看到所有其他答案,我想知道为什么每个人都有多个函数解决这个问题,当有一个可用的功能完全符合他的需要时:根据格式解析一个字符串。这也导致更少sql注入的代码恕我直言。当网址扩展或追加查询字符串时,它不会破坏某些东西。
编辑2
list($node_id, $sub, $sub_id) = sscanf($url, "node/%d/%[^/]/%d");
会为您提供" pdf"并且它的ID分开而不是"节点/%d /%s /%d"。这是因为char /
也匹配%s
。使用%[^/]
匹配除正斜杠之外的所有内容。
答案 2 :(得分:2)
$url = "node/95/pdf/1";
// Find the last occurence of a slash, get everything after that.
$id = substr($url, strrpos($url, "/") + 1 );
答案 3 :(得分:0)
尝试:
$input = 'node/95/pdf/1';
$parts = explode('/', $input);
$output = (int) $parts[3];