Ich muss das letzte Zeichen einer Zeichenfolge erhalten. Angenommen, ich habe "Tester" als Eingabezeichenfolge und möchte, dass das Ergebnis "s" ist. Wie kann ich das in PHP machen?
Ich muss das letzte Zeichen einer Zeichenfolge erhalten. Angenommen, ich habe "Tester" als Eingabezeichenfolge und möchte, dass das Ergebnis "s" ist. Wie kann ich das in PHP machen?
Antworten:
substr("testers", -1); // returns "s"
Oder für Multibyte-Zeichenfolgen:
substr("multibyte string…", -1); // returns "…"
mb_substr
( php.net/mb_substr ).
Oder durch direkten Stringzugriff :
$string[strlen($string)-1];
Beachten Sie, dass dies für Multibyte-Zeichenfolgen nicht funktioniert. Wenn Sie mit Multibyte-Zeichenfolgen arbeiten müssen, sollten Sie die Funktionsfamilie der mb_*
Zeichenfolgen verwenden.
Ab PHP 7.1.0 werden auch negative numerische Indizes unterstützt, zB nur $string[-1];
Ab PHP 7.1 können Sie dies tun ( Akzeptiertes RFC für 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}; // <-- this will be deprecated in PHP 7.4
die();
Ich lasse Sie die Ausgabe erraten.
Außerdem habe ich dies mit den folgenden Ergebnissen zum Leistungscode von xenonite hinzugefügt :
substr () dauerte 7,0334868431091 Sekunden
Der Array-Zugriff dauerte 2,3111131191254 Sekunden
Der direkte String-Zugriff (negative String-Offsets) dauerte 1,7971360683441 Sekunden
Ich kann keine Kommentare hinterlassen, aber denke in Bezug auf die Antwort von FastTrack auch daran, dass das Zeilenende möglicherweise nur ein einzelnes Zeichen ist. ich würde vorschlagen
substr(trim($string), -1)
BEARBEITEN: Mein Code unten wurde von jemandem bearbeitet, sodass er nicht das tut, was ich angegeben habe. Ich habe meinen ursprünglichen Code wiederhergestellt und den Wortlaut geändert, um ihn klarer zu machen.
trim
(oder rtrim
) entfernt alle Leerzeichen. Wenn Sie also nach Leerzeichen, Tabulatoren oder anderen Leerzeichen suchen müssen, ersetzen Sie zuerst manuell die verschiedenen Zeilenenden:
$order = array("\r\n", "\n", "\r");
$string = str_replace($order, '', $string);
$lastchar = substr($string, -1);
Ab PHP 7.1.0 werden auch negative String-Offsets unterstützt. Wenn Sie also mit der Zeit Schritt halten, können Sie wie folgt auf das letzte Zeichen in der Zeichenfolge zugreifen:
$str[-1]
Auf Wunsch eines @mickmackusa ergänze ich meine Antwort mit möglichen Bewerbungsmöglichkeiten:
<?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)
Ich würde empfehlen, sich für Gordons Lösung zu entscheiden, da diese leistungsfähiger ist als 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();
gibt so etwas wie aus
----------------------------------
10000000 repetitions...
----------------------------------
substr() took 2.0285921096802seconds
array access took 1.7474739551544seconds
Denken Sie daran, wenn Sie eine Zeichenfolge haben, die mit der fgets()
Funktion als Zeile aus einer Textdatei gelesen wurde , müssen Sie diese verwenden, substr($string, -3, 1)
damit Sie das tatsächliche Zeichen und nicht einen Teil der CRLF (Carriage Return Line Feed) erhalten.
Ich glaube nicht, dass die Person, die die Frage gestellt hat, dies benötigt, aber für mich hatte ich Probleme, das letzte Zeichen aus einer Zeichenfolge aus einer Textdatei zu erhalten, sodass ich sicher bin, dass andere auf ähnliche Probleme stoßen werden.
Sie können das letzte Zeichen mit PHP auf viele Arten finden, wie substr () und mb_substr () .
Wenn Sie Multibyte-Zeichencodierungen wie UTF-8 verwenden, verwenden Sie mb_substr anstelle von substr
Hier kann ich Ihnen beide Beispiele zeigen:
<?php
echo substr("testers", -1);
echo mb_substr("testers", -1);
?>
Eine Zeichenfolge in verschiedenen Sprachen, einschließlich Cis und PHP, wird ebenfalls als Zeichenfolge betrachtet.
Zu wissen, dass Array-Operationen theoretisch schneller sein sollten als solche, die Sie ausführen können,
$foo = "bar";
$lastChar = strlen($foo) -1;
echo $foo[$lastChar];
$firstChar = 0;
echo $foo[$firstChar];
Standard-Array-Funktionen wie
count();
funktioniert nicht an einer Zeichenfolge.
Siemano, bekomme nur PHP-Dateien aus dem ausgewählten Verzeichnis:
$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()
hilfreiche Informationen in dieser eigenständigen Bibliothek .