【问题标题】:Get word after certain word in split array?在拆分数组中的某个单词之后获取单词?
【发布时间】:2017-02-08 10:12:12
【问题描述】:

我有一条由正斜杠分隔的路径。

$uri = getenv('REQUEST_URI');
$uri = explode('/', $uri);
$uri = array_filter($uri);
$uri = array_merge($uri, array());

路径最终会是这样的:

/user/john/account

这将获取路径中的最后一个单词“帐户”。

$uri = end($uri);

如何将“用户”之后找到的第一个单词放入变量中?

在这种情况下,它会是 'john',但名称可以在每个新 URI 上更改。

“用户”始终保持同一个词。

【问题讨论】:

标签: php


【解决方案1】:
$uri = "/user/john/account";
$uri_array = explode("/", $uri);
$key = array_search("user", $uri_array);
$desired_value = array_key_exists($key+1, $uri_array) ? $uri_array[$key+1] : "error";
echo $desired_value;

这是您需要的:注意:“用户”是 array_search 中的固定术语..您可以更改它

【讨论】:

  • 您好,我正在尝试实施您的解决方案。我发现了一个小问题,如果路径不完整“/user”没有'john',和$key+1,会报错。
  • 对不起,这是我的错误..检查数组键是否存在总是好的
  • 它现在正在测试中。设置页面需要一段时间,我会回复您并接受您的回答。谢谢。
【解决方案2】:

在 $uri = end($uri) 之前添加:

$uriArray = explode('/',$uri);  //$uriArray[0] = 'user'  //$uriArray[1] = 'john'

$name = $uriArray[1];

这样你也可以得到斜线后的最后一个元素

编辑: 你也可以像这样使用 preg_split('pattern',$string):

$name = preg_split('user/',$uri);

$name 将是“john/account”。然后再次使用explode,将其保存到数组中,元素0为名称

【讨论】:

  • 我之前实际上用过这个,它选择一个位置,但我需要在一个特定的词之后。它仍然可以派上用场,谢谢。
  • 添加了替代解决方案,也许这可以帮助你
【解决方案3】:

在这种情况下使用preg_match 可能更有效:

Psy Shell v0.8.1 (PHP 7.1.1-1+deb.sury.org~xenial+1 — cli) by Justin Hileman
>>> preg_match('~/user/([^/]+)/?~', '/test/user/username/tuedelue', $matches);
=> 1
>>> $matches;
=> [ 
     "/user/username/",
     "username",
   ]
>>> $matches[1];
=> "username"
>>> |

所以这些行

$user = 'unknown';
if (preg_match('~/user/([^/]+)/?~', getenv('REQUEST_URI'), $matches)) {
    $user = $matches[1];
}

会解决你的问题。

【讨论】:

  • 这很好用,但如果我在任何不包含 /user/ 的页面上运行它会出错。有办法解决吗?
  • 您认为这比 M A SIDDIQUI 的解决方案快多少? stackoverflow.com/a/42110367/6806643
  • 你必须在你的代码中尝试一下;-),我不确定。我敢打赌,在 = 7.0 的平局(甚至是数组获胜);如果我找到时间作为基准并再次发表评论
【解决方案4】:

你可以用这个

$uri='/user/john/account';
$from1 ='/user/';
$to1 ='/';
//$uri = explode('/', $uri);

echo get_string_between($uri,$from1,$to1);

function get_string_between ($str,$from,$to) {
    $string = substr($str, strpos($str, $from) + strlen($from));
    if (strstr ($string,$to,TRUE) != FALSE) {
        $string = strstr ($string,$to,TRUE);
    }
    return $string;
}

【讨论】:

    【解决方案5】:

    编辑:使用M A SIDDIQUIs 回答。这是解决这个问题的更好方法

    您可以为此编写一个函数,找出 uri-Array 的哪个位置包含单词 user,然后返回应该包含该名称的下一个位置。

    function getName($uri)
    {
        $uri = explode('/', $uri);
        for($i = 0; $i < sizeof($uri); $i++){
            if($uri[$i] == "user"){
                return $uri[$i+1];
            }
        }
    }
    

    然后你只需要打印出来:

    echo getName("exmaple/user/username/etc");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      • 2017-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-20
      • 1970-01-01
      相关资源
      最近更新 更多