2010-04-21 209 views
344

我需要得到一個字符串的最後一個字符。 假設我有「測試者」作爲輸入字符串,我希望結果是「s」。我怎麼能在PHP中做到這一點?如何獲取PHP中最後一個字符串的字符?

+0

見我的回答如下在PHP 7.1這一功能。 – RyanNerd 2016-03-12 01:04:58

+0

您可能會發現['s($ str) - > end()'](https://github.com/delight-im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str.php#L192)有幫助,因爲在[這個獨立的庫]中找到(https://github.com/delight-im/PHP-Str)。 – caw 2016-07-26 23:43:32

回答

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

如果你使用多字節字符編碼像UTF-8,使用'mb_substr'(http://php.net/而不是使用mb_substr)。 – Gumbo 2010-04-21 10:19:26

+5

對於我的substr($ string,strlen($ string)-1,1);這麼多。似乎我採取了很長的路! – jeffkee 2014-03-19 22:58:08

+3

如果字符串被評估爲二進制字符串,則只需要多字節字符串函數。也就是說,當php不知道編碼。否則,典型的非多字節字符串函數就可以正常工作。 – 2015-03-16 17:50:19

55
substr($string, -1) 
+2

沒有PHP函數稱爲「子字符串」,除非您創建了自己的子字符串函數,否則將會出現錯誤。應該是「substr」。 – 2010-04-21 09:52:55

+21

啊你破壞了整個玩笑。 +8投票的錯誤答案看起來只是驚人的:) – 2010-04-21 09:56:22

+2

嗯......,我的意思是'substr'當然 – knittl 2010-04-21 10:12:20

52

或者通過direct string access

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

注意,這不適用於多字節字符串工作。如果您需要多字節字符串的工作,考慮使用mb_* string family of functions.

+2

我喜歡這個C風格的答案,我想知道爲什麼這隻有這幾個upvotes。 – 2014-06-19 16:04:32

+13

@ValentinMercier:因爲這是一個PHP的問題,而不是C. – 2014-07-19 19:28:18

+2

@ValentinMercier ...和_只有C程序員有一個容易混淆的代碼! http://ioccc.org/ – Slashback 2015-11-08 02:49:34

3

記住,如果你有這被解讀爲使用fgets()功能的文本文件中的行的字符串,你需要使用substr($string, -3, 1)使您獲得實際字符,而不是CRLF(回車換行)的一部分。

我不認爲問這個問題的人需要這個,但對我而言,我無法從文本文件中獲取字符串中的最後一個字符,所以我確信其他人會遇到類似的問題。

14

我不能留下評論,但對於FastTrack的回答,還請記住,行尾可能只有單個字符。我建議

substr(trim($string), -1) 

編輯:我下面的代碼是由人編輯,使它不能做什麼,我指示。我已經恢復了我的原始代碼並更改了措辭,使其更加清晰。

trim(或rtrim)將刪除所有空白,所以如果你需要檢查是否有空格,製表符或其他空白,首先手動更換各種行結尾:

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

我倒是勸去戈登的解決方案,因爲它比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 
+2

這應該是對戈登答案的評論。 – Goose 2015-11-23 20:42:14

+1

可以確認這一點。弦越長,性能差異越大。在我的測試中,有10個字符,substr約慢20% – Philipp 2016-02-29 21:09:19

+0

並不奇怪,因爲substr()具有函數調用的開銷,另一個是「C like」直接字符串操作。順便說一句我在PHP 7.1-dev上運行此代碼的結果:substr()花了7.090255022049秒\ 陣列訪問花了2.3145787715912秒 – RyanNerd 2016-03-12 00:10:45

15

在和未來的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。7971360683441seconds

+0

故意拼寫錯誤... – RyanNerd 2016-03-12 00:57:35

+0

真棒功能! – Slowaways 2016-11-06 18:01:17

+0

感謝您發佈基準測試!如果有人對C#基準測試做同樣的事情感興趣,[本頁](http://cc.davelozinski。com/c-sharp/c-fast-way-check-last-character-of-a-string)是一個很好的閱讀。直接訪問最後的角色贏了。 – WorkRelated 2017-06-07 01:28:57

1

您可以使用PHP許多方面就像substr()mb_substr()找到最後一個字符。

如果您在使用多字節字符編碼如UTF-8,使用mb_substr代替SUBSTR

在這裏,我可以告訴你兩個例子:

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

LIVE DEMO

1

不同語言的字符串,包括C sharp和PHP也被認爲是一組字符。

知道,在理論上數組操作應該比那些字符串你可以做的更快,

$foo = "bar"; 


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

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

然而,像

count(); 

標準陣列功能將不會在一根繩子上的工作。

0

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 />'; 
    } 
} 
相關問題