2

我试图从这个字符串的末尾获取 ID,即 - 之后的 4305。下面的代码从左到右工作并显示 150。我怎样才能让它从右到左工作以在 - 之后显示 4305?

  $mystring = "150-Adelaide-Street-Brisbane-Cbd-4305";
  $mystring = substr($mystring, 0, strpos($mystring, "-"));
  echo $mystring;

更新:这可以满足我的需要,但我确信有更好的方法来编写它:

  $mystring = "150-Adelaide-Street-Brisbane-Cbd-4305";
  $mystring = substr(strrev($mystring), 0, strpos(strrev($mystring), "-"));
  echo strrev($mystring);
4

5 回答 5

5

您可以使用strrpos获取字符串中的最后一个连字符,然后在此字符之后获取字符串的其余部分。

$mystring = "150-Adelaide-Street-Brisbane-Cbd-4305";
$mystring = substr($mystring, strrpos($mystring, "-") + 1);
echo $mystring;
于 2012-07-18T02:17:09.770 回答
4

将其拆分-为一个数组,并弹出最后一个元素:

$mystring = "150-Adelaide-Street-Brisbane-Cbd-4305";
$parts = explode("-", $mystring);
echo array_pop($parts);

或者,如果您需要保持数组完整,请使用end()前进到最后一个元素并返回它:

echo end($parts));

这比 using 效率低strrpos(),但在这不是问题的情况下,我倾向于使用这种方法,因为它不需要我过多考虑字符串索引,如果你需要的不是第一个或最后一个分隔位置,拉数组索引比进行从内部部分拉出所需的字符串操作要容易一些。

于 2012-07-18T02:17:22.460 回答
2

如果你喜欢我的一位同事,他喜欢使用正则表达式来处理一切......那么

  $mystring = "150-Adelaide-Street-Brisbane-Cbd-4305";
  preg_match('~-(\d+)$~', $mystring, $matches);
  echo $matches[1];
于 2012-07-18T02:19:54.480 回答
0

最简单的方法肯定是使用explode

通过使用explode,您可以将字符串拆分为一个数组,其中每个部分都可以使用索引作为单独的标识符进行访问。

使用示例:

  $mystring = "150-Adelaide-Street-Brisbane-Cbd-4305";
  $mystring = explode("-", $mystring);
  echo $mystring[count($mystring)-1]; //Extract the last item
于 2012-07-18T02:19:35.840 回答
0

正如 Matthew 在上面的评论中发布的那样,反向扫描更快,因为匹配仅在 4 个步骤后完成 - 猜测没有“更合适的方法”将需求转换为 PHP 语法(这也是他们在我学习 C 时教我的方式句法):

echo substr($mystring, strrpos($mystring, "-") + 1);

PHP 手册

于 2013-01-01T23:48:38.790 回答