在变量PHP中从url获取id

时间:2016-12-21 12:53:14

标签: php

从变量中的URL获取id时遇到问题!

网址就像这样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']; 
    }

5 个答案:

答案 0 :(得分:6)

完成此任务的最简单方法是使用basename()

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

将打印

1123

参考网址click hear

答案 1 :(得分:4)

我会这样做:

  1. 使用/
  2. 分解字符串
  3. 获取爆炸阵列的长度。
  4. 获取最后一个元素,即ID。
  5. <强>代码

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

答案 2 :(得分:2)

您绝对应该使用parse_url选择网址的正确部分 - 以防网址上存在?query#fragment

$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";
}

好的,所以我们在这里定义我们的路线以及应该在每条路线上发生的事情

// 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?

是的,我真的 对我目前的工作任务感到厌烦......

答案 3 :(得分:1)

这可以很简单。首先,您应该使用包含URL的字符串创建变量。这可以使用$_SERVER数组完成。其中包含有关您的服务器的信息,以及您实际所在的网址。

第二点是拆分URL。这可以通过不同的方式完成,我喜欢使用p_reg函数来拆分它。在您的情况下,您希望在每个/之后进行拆分,因为这样您就可以在每个&#34;目录中使用一个数组&#34;您的网址。

之后,它只是在数组中选择正确的位置。

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

答案 4 :(得分:1)

要彻底,您需要从parse_url()开始。

<?xml version="1.0" encoding="utf-8"?>
<[package].MultiLineRadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:multi_line_radio_group="http://schemas.android.com/apk/res-auto"
    android:id="@+id/multi_line_radio_group"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    multi_line_radio_group:max_in_row="3"
    multi_line_radio_group:radio_buttons="@array/radio_buttons" />

这将为您提供一个包含少量键的数组。你正在寻找的是道路。

将路径拆分为/并取最后一个路径。

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

您的ID现在位于$path_parts=explode('/', $parts['path']);