Câu trả lời:
substr("testers", -1); // returns "s"
Hoặc, đối với chuỗi multibytes:
substr("multibyte string…", -1); // returns "…"
mb_substr
( php.net/mb_substr ).
Hoặc bằng cách truy cập chuỗi trực tiếp :
$string[strlen($string)-1];
Lưu ý rằng điều này không hoạt động cho chuỗi đa bào. Nếu bạn cần làm việc với chuỗi đa chuỗi, hãy xem xét sử dụng họ mb_*
chuỗi hàm.
Kể từ phiên bản PHP 7.1.0 cũng được hỗ trợ, ví dụ: $string[-1];
Từ PHP 7.1, bạn có thể thực hiện việc này ( rfc được chấp nhận cho các chuỗi bù âm ):
<?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();
Tôi sẽ cho bạn đoán đầu ra.
Ngoài ra, tôi đã thêm mã này vào mã hiệu suất của xenonite với các kết quả sau:
chất nền () mất 7.03348684 31091 giây
truy cập mảng mất 2.3111131191254 giây
Truy cập chuỗi trực tiếp (offset chuỗi âm) mất 1.7971360683441 giây
Tôi không thể để lại nhận xét, nhưng liên quan đến câu trả lời của FastTrack, cũng nên nhớ rằng kết thúc dòng có thể chỉ là một ký tự. Tôi sẽ đề nghị
substr(trim($string), -1)
EDIT: Mã của tôi dưới đây đã được chỉnh sửa bởi một người nào đó, khiến nó không làm được những gì tôi đã chỉ ra. Tôi đã khôi phục mã gốc của mình và thay đổi từ ngữ để làm cho nó rõ ràng hơn.
trim
(hoặc rtrim
) sẽ xóa tất cả khoảng trắng, vì vậy nếu bạn cần kiểm tra khoảng trắng, tab hoặc khoảng trắng khác, trước tiên hãy thay thế các kết thúc dòng khác nhau:
$order = array("\r\n", "\n", "\r");
$string = str_replace($order, '', $string);
$lastchar = substr($string, -1);
Kể từ phiên bản PHP 7.1.0, phần bù chuỗi âm cũng được hỗ trợ. Vì vậy, nếu bạn theo kịp thời đại, bạn có thể truy cập ký tự cuối cùng trong chuỗi như thế này:
$str[-1]
Theo yêu cầu của @mickmackusa, tôi bổ sung câu trả lời của mình bằng các cách áp dụng có thể:
<?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)
Tôi khuyên bạn nên tìm giải pháp của Gordon vì nó hiệu quả hơn chất nền ():
<?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();
xuất ra một cái gì đó như
----------------------------------
10000000 repetitions...
----------------------------------
substr() took 2.0285921096802seconds
array access took 1.7474739551544seconds
Hãy nhớ rằng, nếu bạn có một chuỗi được đọc dưới dạng một dòng từ tệp văn bản bằng fgets()
hàm, bạn cần sử dụng substr($string, -3, 1)
để bạn có được ký tự thực tế và không phải là một phần của CRLF (Nguồn cấp dữ liệu dòng trả về vận chuyển).
Tôi không nghĩ người hỏi câu hỏi cần điều này, nhưng đối với tôi, tôi gặp khó khăn khi lấy ký tự cuối cùng từ một chuỗi từ tệp văn bản nên tôi chắc chắn những người khác sẽ gặp phải vấn đề tương tự.
Bạn có thể tìm thấy ký tự cuối cùng bằng cách sử dụng php theo nhiều cách như chất nền () và mb_substr () .
Nếu bạn đang sử dụng bảng mã ký tự nhiều byte như UTF-8, sử dụng mb_substr thay vì substr
Ở đây tôi có thể cho bạn thấy cả hai ví dụ:
<?php
echo substr("testers", -1);
echo mb_substr("testers", -1);
?>
Một chuỗi trong các ngôn ngữ khác nhau bao gồm C sharp và PHP cũng được coi là một mảng các ký tự.
Biết rằng trong các hoạt động mảng lý thuyết nên nhanh hơn các chuỗi bạn có thể làm,
$foo = "bar";
$lastChar = strlen($foo) -1;
echo $foo[$lastChar];
$firstChar = 0;
echo $foo[$firstChar];
Tuy nhiên, các hàm mảng tiêu chuẩn như
count();
sẽ không hoạt động trên một chuỗi.
Siemano, chỉ nhận các tập tin php từ thư mục đã chọn:
$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 />';
}
}
s($str)->end()
hữu ích, như được tìm thấy trong thư viện độc lập này .