我需要得到字符串的最后一个字符。 假设我有“测试者”作为输入字符串,我希望结果是“s”。PHP中怎么做呢?< / p >
substr($string, -1)
substr("testers", -1); // returns "s"
或者,对于多字节字符串:
mb_substr("multibyte string…", -1); // returns "…"
或者通过直接字符串访问:
$string[strlen($string)-1];
注意,这不适用于多字节字符串。如果需要使用多字节字符串,可以考虑使用mb_*字符串函数族。
mb_*
PHP 7.1.0还支持负数值索引,例如$string[-1];
$string[-1];
请记住,如果使用fgets()函数从文本文件中读取一行字符串,则需要使用substr($string, -3, 1),以便获得实际字符,而不是CRLF(回车换行)的一部分。
fgets()
substr($string, -3, 1)
我不认为提出这个问题的人需要这个,但对我来说,我在从文本文件的字符串中获取最后一个字符时遇到了麻烦,所以我相信其他人也会遇到类似的问题。
我不能留下评论,但关于FastTrack的回答,也要记住,行尾可能只有一个字符。我建议
substr(trim($string), -1)
# EYZ0 # EYZ1
trim(或rtrim)将删除所有空白,所以如果你确实需要检查空格,制表符或其他空白,首先手动替换各种行结束符:
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
在PHP 7.1中,你可以这样做(接受负字符串偏移量的rfc):
<?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秒
Substr()耗时7.0334868431091秒
数组访问花费了2.3111131191254秒
直接字符串访问(负字符串偏移量)花费了1.7971360683441秒
你可以用很多方法找到最后一个字符,比如substr ()和mb_substr ()。
如果使用UTF-8等多字节字符编码,请使用mb_substr而不是字符串的子串
在这里我可以给你两个例子:
<?php echo substr("testers", -1); echo mb_substr("testers", -1); ?>
LIVE DEMO
不同语言(包括C sharp和PHP)中的字符串也被认为是字符数组。
知道在理论上数组操作应该比字符串操作快,
$foo = "bar"; $lastChar = strlen($foo) -1; echo $foo[$lastChar]; $firstChar = 0; echo $foo[$firstChar];
然而,标准数组函数像
count();
对字符串无效。
Siemano,只获取所选目录下的php文件:
$dir = '/home/zetdoa/ftp/domeny/MY_DOMAIN/projekty/project'; $files = scandir($dir, 1); foreach($files as $file){ $n = substr($file, -3); if($n == 'php'){ echo $file.'<br />'; } }
$str[-1]
DEMO
应@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)
使用substr(),第二个参数为负数
从PHP 8开始,您现在可以使用str_ends_with()
str_ends_with()
$string = 'testers'; if (\str_ends_with($string, 's') { // yes }