2016-12-21 43 views
0

有问题需要从变量中的URL获取id!从变量中获取URL中的id PHP

的URL是这样的domain.com/article/1123/

及其般的动感与众多ID的

我想将1123保存在变量中,请帮助!

一本

if(isset($_GET['id']) && !preg_match('/[0-9]{4}[a-zA-Z]{0,2}/', $_GET['id'], $id)) { 
     require_once('404.php'); 
    } else { 
     $id = $_GET['id']; 
    } 
+0

什么问题?你做了什么不能得到它? –

+0

你在使用框架吗?如果是这样,哪一个 – RiggsFolly

+0

可能重复[非常简单的正则表达式来获取网址中的数字:http://artige.no/bilde/6908](http://stackoverflow.com/questions/7807692/very-simple-regex-在网址-http-artige-no-bilde-6908) –

回答

3

我会这样去做尝试过:

  1. 爆炸使用/的字符串。
  2. 获取爆炸阵列的长度。
  3. 获取最后一个元素,它将是ID。

代码

$url = $_SERVER[REQUEST_URI]; 
$url = explode("/", $url); 
$id = $url[count($url) - 1]; 
+0

这不适用于我或我做错任何事情! :( –

+0

好吧...你有没有把'$ url'定义为当前URL?@amokkhan –

+0

@PraveenKumar是的,这是完美的一个链接,是一个很好的解决方案,但我需要这样的动态网址,如' domain.com/article/1123'和'domain.com/article/2342/'谢谢 –

1

这是可以做到非常简单。首先,你应该创建一个包含你的URL的字符串变量。这可以通过$_SERVER阵列完成。这包含有关您的服务器的信息,以及您实际所在的URL。

第二点是拆分URL。这可以通过不同的方式完成,我喜欢使用p_reg函数来分割它。在你的情况下,你想要在每个/之后拆分,因为这样你就可以为每个“目录”都有一个数组。

在此之后,其简单地选择在阵列中的位置上。

$path = $_SERVER['REQUEST_URI']; // /article/1123/ 
$folders = preg_split('/', $path); // splits folders in array 
$your_id = $folders[1]; 
+0

@JayBlanchard'preg_split'? –

+1

这几乎就像'explode()'。 –

+0

@JayBlanchard'preg_ *'函数用于** P ** erl ** Reg ** ular表达式... – naomik

1

为了彻底,你需要从parse_url()开始。

$parts=parse_url("domain.com/article/1123/"); 

这将给你一个数组与一把钥匙。你正在寻找的是路径。

拆分的路径/和取最后一个。

$path_parts=explode('/', $parts['path']); 

您的ID现在是$path_parts[count($path_parts)-1];

2

你绝对应该使用parse_url选择URL的正确部分 - 以防万一?query#fragment存在于URL

$parts = explode('/', parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)); 

$parts[0]; // 'domain.com' 
$parts[1]; // 'article' 
$parts[2]; // '1123' 

您可能也想将它们作为名称引用。你可以做到这一点典雅,array_combine

$params = array_combine(['domain', 'resource', 'id'], $parts); 

$params['domain']; // 'domain.com' 
$params['resource']; // 'article' 
$params['id'];  // '1123' 

我真的感觉像一个拖拉所以我现在让你有点路由器。你现在不必费心解剖这些东西;首先学习如何使用它,然后你可以稍后将它分开。

function makeRouter ($routes, callable $else) { 
    return function ($url) use ($routes, $else) { 
    foreach ($routes as $route => $handler) { 
     if (preg_match(makeRouteMatcher($route), $url, $values)) { 
     call_user_func_array($handler, array_slice($values, 1)); 
     return; 
     } 
    } 
    call_user_func($else, $url); 
    }; 
} 

function makeRouteMatcher ($route) { 
    return sprintf('#^%s$#', preg_replace('#:([^/]+)#', '([^/]+)', $route)); 
} 

function route404 ($url) { 
    echo "No matching route: $url"; 
} 

OK,所以在这里我们将定义我们的路线,什么是应该在每个路径上发生现在

// create a router instance with your route patterns and handlers 
$router = makeRouter([ 

    '/:domain/:resource/:id' => function ($domain, $resource, $id) { 
    echo "domain:$domain, resource:$resource, id:$id", PHP_EOL; 
    }, 

    '/public/:filename' => function ($filename) { 
    echo "serving up file: $filename", PHP_EOL; 
    }, 

    '/' => function() { 
    echo "root url!", PHP_EOL; 
    } 
], 'route404'); 

让我们来看看它做我们的招标......

$router('/domain.com/article/1123'); 
// domain:domain.com, resource:article, id:1123 

$router('/public/cats.jpg'); 
// serving up file: cats.jpg 

$router('/'); 
// root url! 

$router('what?'); 
// No matching route: what? 

呀,我真的无聊与我目前的工作任务...

4

T他做到这一点绝对简单的方法,是用basename()

echo basename('domain.com/article/1123'); 

,它将打印

1123 

参考网址click hear

+0

我想每次从当前url保存id不仅来自一个url –

+0

然后将包含URL的变量传递给'basename( 0'函数 –

+0

感谢jay blanchard你能给我一个来自basename的例子!对不起,我不太擅长php –