Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP从右向左回显字符串的一部分_Php_String_Substr_Strpos - Fatal编程技术网

PHP从右向左回显字符串的一部分

PHP从右向左回显字符串的一部分,php,string,substr,strpos,Php,String,Substr,Strpos,我试图从这个字符串的末尾,即-之后的4305,获取ID。下面的代码从左到右工作,显示150。我怎样才能使它从右到左显示的4305后- $mystring = "150-Adelaide-Street-Brisbane-Cbd-4305"; $mystring = substr($mystring, 0, strpos($mystring, "-")); echo $mystring; 更新:这正是我所需要的,但我相信有更好的方法来编写它: $mystring = "150-Ad

我试图从这个字符串的末尾,即-之后的4305,获取ID。下面的代码从左到右工作,显示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);

您可以使用
strrpos
获取字符串中的最后一个连字符,然后获取该字符后面的其余字符串

$mystring = "150-Adelaide-Street-Brisbane-Cbd-4305";
$mystring = substr($mystring, strrpos($mystring, "-") + 1);
echo $mystring;

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

$mystring = "150-Adelaide-Street-Brisbane-Cbd-4305";
$parts = explode("-", $mystring);
echo array_pop($parts);
或者,如果需要保持数组的完整性,请使用
end()
前进到最后一个元素并返回它:

echo end($parts));

这比使用
strrpos()
效率低,但如果这不是问题,我会倾向于使用此方法,因为它不需要我考虑太多字符串索引,如果您需要的不是第一个或最后一个分隔的位置,提取数组索引比从内部部分提取所需的字符串操作要容易一些。

最简单的方法肯定是使用

通过使用explode,可以将字符串拆分为一个数组,每个部分都可以使用索引作为单个标识符访问

用法示例:

  $mystring = "150-Adelaide-Street-Brisbane-Cbd-4305";
  $mystring = explode("-", $mystring);
  echo $mystring[count($mystring)-1]; //Extract the last item

如果你喜欢我的一个同事,他喜欢用正则表达式做任何事情。。。然后

  $mystring = "150-Adelaide-Street-Brisbane-Cbd-4305";
  preg_match('~-(\d+)$~', $mystring, $matches);
  echo $matches[1];

正如Matthew在上面的评论中所说的,反向扫描速度更快,因为匹配只需4个步骤即可完成-猜测没有“更合适的方法”将需求转换为PHP语法(这也是我学习C语法时他们教我的方法):


.

不要向前看,而要向后看。。(或应用反向转换或拆分或..)substr($mystring,strrpos($mystring,“-”)+1)^这是最合适的方法-即使有几种可能性。没有必要拆分整个字符串。我同意,分解函数似乎是最好的解决方案。我认为他想从字符串中获取ID,因此使用end()函数将是要使用的函数。位置绝对不容易出错。我曾经用$parts[sizeof($parts)-1]检索最后一个元素。。。end()函数在这种情况下对我来说是新函数,必须记住这一点。好的,现在告诉我,如果要从上面的字符串中提取
Street
,它有多容易?您可能会编写另一行类似的代码,对吗?如果你认为这是有效的,那我没什么好说的。但是是的,如果只是最后一句话的话。这很好。华尔街和中国的玉米价格有什么关系?这不是想上街的问题。他想在机场拿到身份证end@Kris,如果你想按字面意思去做,问题是如何从右向左移动字符串,哈哈。:)(干杯)@Starx我正试图回答提出的问题。如果问题是解析字符串的每一部分,我会给出不同的答案。我同意如果需要更多的字符串片段,这不是最好的解决方案。是的,我刚看完结尾我很高兴你们理解了:)我不会说这是最简单的,当然也不是最有效的。数组/字符串函数可能执行得更快(不是详细的基准测试-但有感觉)。所需的匹配非常简单,它需要正则表达式“/.*-(\d+)$/”来匹配要求-这是字符串末尾的几个数字。投票赞成一个可能的解决方案-但请更新模式,测试它,匹配在步骤1后失败)。请向您的同事提供以下选项之一:。我猜他/她会完全疯掉,这是一个构建更复杂表达式和测试其性能的伟大工具。
echo substr($mystring, strrpos($mystring, "-") + 1);