我需要得到字符串的最后一个字符。 假设我有“测试者”作为输入字符串,我希望结果是“s”。PHP中怎么做呢?


当前回答

从PHP 8开始,你可以使用str_ends_with()

$string = 'testers';
if (\str_ends_with($string, 's') {
    // yes
}

其他回答

在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秒

或通过直接字符串访问:

$string[strlen($string)-1];

注意,这不适用于多字节字符串。如果需要使用多字节字符串,可以考虑使用mb_* string系列函数。

PHP 7.1.0也支持负数值索引,例如$string[-1];

我不能留下评论,但关于FastTrack的回答,也要记住,行尾可能只有一个字符。我建议

substr(trim($string), -1)

编辑:我下面的代码被某人编辑了,使它不做我所指示的事情。我已经恢复了我原来的代码,并修改了措辞,使它更清楚。

Trim(或rtrim)将删除所有空白,所以如果你确实需要检查空格、制表符或其他空白,首先手动替换各种行结束符:

$order = array("\r\n", "\n", "\r");
$string = str_replace($order, '', $string);
$lastchar = substr($string, -1);

从PHP 7.1.0开始,也支持负字符串偏移量。 所以,如果你跟上时代,你可以像这样访问字符串的最后一个字符:

$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)

从PHP 8开始,你可以使用str_ends_with()

$string = 'testers';
if (\str_ends_with($string, 's') {
    // yes
}