Bir dizenin son karakterini almam gerekiyor. Giriş dizesi olarak "test" var ve sonuç "s" istiyorum. bunu PHP'de nasıl yapabilirim?
Bir dizenin son karakterini almam gerekiyor. Giriş dizesi olarak "test" var ve sonuç "s" istiyorum. bunu PHP'de nasıl yapabilirim?
Yanıtlar:
substr("testers", -1); // returns "s"
Veya çok baytlı dizeler için:
substr("multibyte string…", -1); // returns "…"
mb_substr
( php.net/mb_substr ) öğesini kullanın.
Veya doğrudan dize erişimi ile :
$string[strlen($string)-1];
Bunun çok baytlı dizelerde çalışmadığını unutmayın. Çok baytlı dize ile çalışmanız gerekiyorsa, dize işlev ailesini kullanmayı düşünün mb_*
.
PHP 7.1.0'dan itibaren negatif sayısal indeksler de desteklenmektedir, örn. $string[-1];
PHP 7.1'den bunu yapabilirsiniz ( Negatif string ofsetleri için kabul edilen 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();
Çıktıyı tahmin etmenize izin vereceğim.
Ayrıca, bu sonuçlarla xenonite'ın performans koduna ekledim :
substr () 7.0334868431091 saniye aldı
dizi erişimi 2.3111131191254 saniye aldı
Doğrudan dize erişimi (negatif dize ofsetleri) 1.7971360683441 saniye aldı
Yorum bırakamıyorum, ancak FastTrack'ın cevabı ile ilgili olarak, satır sonunun sadece tek bir karakter olabileceğini unutmayın. öneririm
substr(trim($string), -1)
EDIT: Aşağıdaki kod, birileri tarafından düzenlenmiş, bu benim belirttiğim yapmak değil. Orijinal kodumu geri yükledim ve daha açık hale getirmek için ifadeleri değiştirdim.
trim
(veya rtrim
) tüm boşlukları kaldıracaktır , bu nedenle boşluk, sekme veya diğer boşlukları kontrol etmeniz gerekiyorsa, önce çeşitli satır sonlarını manuel olarak değiştirin:
$order = array("\r\n", "\n", "\r");
$string = str_replace($order, '', $string);
$lastchar = substr($string, -1);
PHP 7.1.0'dan itibaren, negatif dize ofsetleri de desteklenmektedir. Böylece, zamana ayak uydurursanız, dizedeki son karaktere şu şekilde erişebilirsiniz:
$str[-1]
Bir mickmackusa'nın talebi üzerine, cevabımı olası başvuru yollarıyla destekliyorum:
<?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)
Substr () 'den daha performanslı olduğu için Gordon'un çözümüne gitmenizi tavsiye ederim:
<?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();
gibi bir şey çıktılar
----------------------------------
10000000 repetitions...
----------------------------------
substr() took 2.0285921096802seconds
array access took 1.7474739551544seconds
Unutmayın, fgets()
işlevi kullanarak bir metin dosyasından satır olarak okunan bir substr($string, -3, 1)
dizeniz varsa, CRLF'nin (Satır Başı Satır Beslemesi) bir parçası değil, gerçek karakteri elde etmek için kullanmanız gerekir .
Soruyu soran kişinin buna ihtiyacı olduğunu sanmıyorum, ama benim için, bir metin dosyasından bir dizeden son karakteri almakta sorun yaşıyordum, bu yüzden başkalarının benzer sorunlarla karşılaşacağından eminim.
Son karakteri php kullanarak substr () ve mb_substr () gibi birçok yolla bulabilirsiniz .
UTF-8 gibi çok baytlı karakter kodlamaları kullanıyorsanız , substr yerine mb_substr kullanın
Burada her iki örneği de gösterebilirim:
<?php
echo substr("testers", -1);
echo mb_substr("testers", -1);
?>
C sharp ve PHP gibi farklı dillerde bir dize de bir dizi karakter olarak kabul edilir.
Teorik dizi işlemlerinin yapabileceğiniz string işlemlerinden daha hızlı olması gerektiğini bilerek,
$foo = "bar";
$lastChar = strlen($foo) -1;
echo $foo[$lastChar];
$firstChar = 0;
echo $foo[$firstChar];
Ancak, standart dizi işlevleri
count();
bir dize üzerinde çalışmaz.
Siemano, sadece seçilen dizinden php dosyaları alı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()
bulunan yardımcı olabilir .