574 Stimmen

Wie erhält man das letzte Zeichen eines Strings in PHP?

Ich muss das letzte Zeichen einer Zeichenkette abrufen. Sagen wir, ich habe "testers" als Eingabe-String und ich möchte, dass das Ergebnis "s" ist. wie kann ich das in PHP tun?

18voto

Slashback Punkte 531

Ich kann keine Kommentare hinterlassen, aber in Bezug auf die Antwort von FastTrack sollten Sie auch daran denken, dass das Zeilenende nur aus einem einzigen Zeichen bestehen darf. Ich würde vorschlagen

substr(trim($string), -1)

EDIT: Mein nachstehender Code wurde von jemandem bearbeitet, so dass er nicht das tut, was ich angegeben habe. Ich habe meinen ursprünglichen Code wiederhergestellt und den Wortlaut geändert, um ihn deutlicher zu machen.

trim (o rtrim ) wird entfernt todo Wenn Sie also nach Leerzeichen, Tabulatoren oder anderen Leerzeichen suchen müssen, ersetzen Sie zunächst manuell die verschiedenen Zeilenenden:

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

6voto

Xenonite Punkte 1563

Ich würde zu Gordons Lösung raten, da sie 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 etwas aus wie

 ---------------------------------- 
 10000000 repetitions...
 ----------------------------------

 substr() took 2.0285921096802seconds 
 array access took 1.7474739551544seconds

4voto

FastTrack Punkte 8579

Erinnern Sie sich, wenn Sie eine Zeichenkette haben, die als Zeile aus einer Textdatei gelesen wurde, indem Sie die fgets() Funktion, müssen Sie substr($string, -3, 1) so dass Sie das eigentliche Zeichen und nicht einen Teil des CRLF (Carriage Return Line Feed) erhalten.

Ich glaube nicht, dass die Person, die die Frage gestellt hat, dies brauchte, aber ich hatte Probleme, das letzte Zeichen aus einer Zeichenkette aus einer Textdatei zu erhalten, und ich bin sicher, dass andere auf ähnliche Probleme stoßen werden.

2voto

Faisal Punkte 4304

Sie können das letzte Zeichen mit php auf verschiedene Arten finden substr() y mb_substr() .

Wenn Sie Multibyte-Zeichenkodierungen wie UTF-8 verwenden, benutzen Sie mb_substr anstelle von Teilbereich

Hier kann ich Ihnen beide Beispiele zeigen:

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

LIVE-DEMO

1voto

Petar Atanasov Punkte 21

In verschiedenen Sprachen, darunter C sharp und PHP, wird eine Zeichenkette auch als Array von Zeichen betrachtet.

Sie wissen, dass Array-Operationen theoretisch schneller sein sollten als String-Operationen,

$foo = "bar";

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

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

Allerdings können Standard-Array-Funktionen wie

count();

funktioniert nicht bei einer Zeichenkette.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X