我需要获取字符串的最后一个字符。假设我的输入字符串为 "testers",我希望结果是 "s"。在PHP中如何实现?
substr("testers", -1); // returns "s"
或者,对于多字节字符串:
mb_substr("multibyte string…", -1); // returns "…"
mb_substr
(http://php.net/mb_substr)代替。 - Gumbostr_ends_with()
函数。 - Tim Rogerssubstr($string, -1)
从 PHP 7.1 开始,您可以这样做(负字符串偏移的已接受请求):
<?php
$silly = 'Mary had a little lamb';
echo $silly[-20];
echo $silly{-6};
echo $silly[-3];
echo $silly[-15];
echo $silly[-13];
echo $silly[-1];
echo $silly[-4];
echo $silly{-10};
echo $silly[-4];
echo $silly[-8];
echo $silly{3}; // <-- this will be deprecated in PHP 7.4
die();
我会让你猜输出结果。
另外,我将这些结果添加到xenonite的性能代码中,结果如下:
substr()花费7.0334868431091秒
数组访问花费2.3111131191254秒
直接字符串访问(负字符串偏移)花费1.7971360683441秒
readablilty
。我猜他的意思是 readability
?是的,五年后,我很好奇哈哈。 - WadePHP Notice: Uninitialized string offset: -1
。因此,请在此之前进行检查。 - sdlins从PHP 7.1.0开始,也支持负字符串偏移量。 因此,如果你跟上时代,你可以像这样访问字符串中的最后一个字符:
$str[-1]
应@mickmackusa的请求,我会补充我的答案并提供可能的应用方式:
<?php
$str='abcdef';
var_dump($str[-2]); // => string(1) "e"
$str[-3]='.';
var_dump($str); // => string(6) "abc.ef"
var_dump(isset($str[-4])); // => bool(true)
var_dump(isset($str[-10])); // => bool(false)
我不能留言,但关于FastTrack的回答,请记住行尾可能只有单个字符。我建议
substr(trim($string), -1)
编辑:我的下面的代码被某人编辑,导致它不能做我想做的事情。我已经恢复了我的原始代码,并更改了措辞以使其更清晰。
trim
(或rtrim
)将删除所有空格,因此如果您确实需要检查空格、制表符或其他空格,则先手动替换各种行结尾:
$order = array("\r\n", "\n", "\r");
$string = str_replace($order, '', $string);
$lastchar = substr($string, -1);
我建议选择Gordon的解决方案,因为它比substr()更高效:
<?php
$string = 'abcdef';
$repetitions = 10000000;
echo "\n\n";
echo "----------------------------------\n";
echo $repetitions . " repetitions...\n";
echo "----------------------------------\n";
echo "\n\n";
$start = microtime(true);
for($i=0; $i<$repetitions; $i++)
$x = substr($string, -1);
echo "substr() took " . (microtime(true) - $start) . "seconds\n";
$start = microtime(true);
for($i=0; $i<$repetitions; $i++)
$x = $string[strlen($string)-1];
echo "array access took " . (microtime(true) - $start) . "seconds\n";
die();
----------------------------------
10000000 repetitions...
----------------------------------
substr() took 2.0285921096802seconds
array access took 1.7474739551544seconds
请记住,如果您有一个由fgets()
函数从文本文件中读取的字符串,您需要使用substr($string, -3, 1)
,以便获取实际字符而不是CRLF(回车符和换行符)的一部分。
我认为提问者可能不需要这个,但对于我来说,我一直在努力从文本文件中的字符串中获取最后一个字符,所以我相信其他人也会遇到类似的问题。
如果您正在使用UTF-8等多字节字符编码,请使用mb_substr而不是substr
这里我可以展示两个例子:
<?php
echo substr("testers", -1);
echo mb_substr("testers", -1);
?>
s($str)->end()
很有用,它可以在这个独立库中找到。 - caw