如何在PHP中获取字符串的最后一个字符串?

时间:2010-04-21 09:44:57

标签: php string

我需要获取字符串的最后一个字符。 假设我有“测试者”作为输入字符串,我希望结果为“s”。我怎么能用PHP做到这一点?

12 个答案:

答案 0 :(得分:878)

substr("testers", -1); // returns "s"

答案 1 :(得分:69)

substr($string, -1) 

答案 2 :(得分:64)

direct string access

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

请注意,这不适用于多字节字符串。如果您需要使用多字节字符串,请考虑使用mb_* string family of functions.

从PHP 7.1.0开始,也支持负数数字索引,例如$string[-1];

答案 3 :(得分:31)

从PHP 7.1开始,您可以执行此操作(Accepted rfc for negative string offsets):

<?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};
die();

我会让你猜出输出。

另外,我将这个结果添加到xenonite's性能代码中:

  

substr()耗时7.0334868431091秒

     

数组访问耗时2.3111131191254秒

     

直接字符串访问需要1.7971360683441秒

答案 4 :(得分:16)

我不能留下评论,但关于FastTrack的答案,还要记住,行结尾可能只是单个字符。我建议

substr(trim($string), -1)

编辑: 我的代码是由某人编辑的,因为它没有按照我的指示行事。我已恢复原始代码并更改了措辞以使其更清晰。

trim(或rtrim)将删除所有空格,因此如果您确实需要检查空格,制表符或其他空格,请手动替换各行结局首先:

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

答案 5 :(得分:5)

我建议选择戈登的解决方案,因为它比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

答案 6 :(得分:4)

请记住,如果您的字符串使用fgets()函数从文本文件中读取为一行,则需要使用substr($string, -3, 1)以便获得实际字符而不是CRLF(回车换行)。

我不认为提出这个问题的人需要这个,但对我来说,我无法从文本文件中的字符串中获取最后一个字符,所以我相信其他人会遇到类似的问题。

答案 7 :(得分:4)

从PHP 7.1.0开始,还支持负字符串偏移量。 因此,如果您紧跟时代发展,可以访问字符串中的最后一个字符,如下所示:

$str[-1]

DEMO

答案 8 :(得分:1)

您可以使用PHP找到最后一个字符,例如substr()mb_substr()

  

如果您使用UTF-8等多字节字符编码,请使用 mb_substr 而不是 substr

在这里,我可以向您展示两个例子:

<?php
    echo substr("testers", -1);
    echo mb_substr("testers", -1);
?>

LIVE DEMO

答案 9 :(得分:1)

包括C sharp和PHP在内的不同语言的字符串也被认为是一个字符数组。

知道理论上阵列操作应该比你能做的字符串操作更快,

$foo = "bar";


$lastChar = strlen($foo) -1;
echo $foo[$lastChar];

$firstChar = 0;
echo $foo[$firstChar];

但是,标准数组函数如

count();

不适用于字符串。

答案 10 :(得分:0)

第二个参数使用带负数的substr()。$newstring = substr($string1, -1);

答案 11 :(得分:-3)

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 />';
  }
}