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


当前回答

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

其他回答

我建议使用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

你可以用很多方法找到最后一个字符,比如substr()和mb_substr()。

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

在这里我可以给你两个例子:

<?php
    echo substr("testers", -1);
    echo mb_substr("testers", -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)

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

substr(trim($string), -1)

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

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

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

不同语言(包括C sharp和PHP)中的字符串也被认为是字符数组。

知道在理论上数组操作应该比字符串操作快,

$foo = "bar";


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

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

然而,标准数组函数像

count();

对字符串无效。