webentwicklung-frage-antwort-db.com.de

Wie bekomme ich das letzte Zeichen eines Strings in PHP?

Ich muss das letzte Zeichen einer Zeichenfolge abrufen. Angenommen, ich habe "Tester" als Eingabezeichenfolge und möchte, dass das Ergebnis "s" ist. Wie kann ich das in PHP machen?

440
streetparade
substr("testers", -1); // returns "s"
912
Rich Adams
substr($string, -1) 
72
knittl

Oder durch direkter String-Zugriff :

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

Beachten Sie, dass dies für Multibyte-Strings nicht funktioniert. Wenn Sie mit Multibyte-Zeichenfolgen arbeiten müssen, sollten Sie die Zeichenfolgenfamilie mb_* verwenden.

Ab PHP 7.1.0 werden auch negative numerische Indizes unterstützt, z. B. nur $string[-1];

67
Gordon

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};
die();

Ich werde Sie die Ausgabe erraten lassen.

Außerdem habe ich dies zu Xenonite's Performance Code mit den folgenden Ergebnissen hinzugefügt:

substr () hat 7.0334868431091Sekunden gedauert

der Array-Zugriff dauerte 2,3111131191254 Sekunden

Der direkte Zeichenfolgenzugriff dauerte 1,7971360683441 Sekunden

34
RyanNerd

Ich kann keine Kommentare hinterlassen, aber im Hinblick auf die Antwort von FastTrack muss beachtet werden, dass das Zeilenende möglicherweise nur ein einzelnes Zeichen ist. ich würde vorschlagen

substr(trim($string), -1)

EDIT: Mein unten stehender Code 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 Bei anderen Leerzeichen müssen Sie die verschiedenen Zeilenenden zuerst manuell ersetzen:

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

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]

DEMO

6
nektobit

Ich würde empfehlen, Gordons Lösung zu wählen, da sie performanter 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 sowas aus

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

 substr() took 2.0285921096802seconds 
 array access took 1.7474739551544seconds
5
Xenonite

Denken Sie daran, wenn Sie eine Zeichenfolge haben, die mit der Funktion fgets() als Zeile aus einer Textdatei gelesen wurde, müssen Sie substr($string, -3, 1) verwenden, damit Sie das tatsächliche Zeichen erhalten und nicht Teil der CRLF (Carriage) Rücklaufvorschub).

Ich glaube nicht, dass die Person, die die Frage gestellt hat, dies brauchte, aber für mich hatte ich Probleme, das letzte Zeichen aus einer Zeichenfolge aus einer Textdatei zu bekommen, so dass ich sicher bin, dass andere auf ähnliche Probleme stoßen werden.

4
FastTrack

Sie können das letzte Zeichen mit PHP auf viele Arten finden, wie z. B. substr () und mb_substr () .

Wenn Sie Multibyte-Zeichencodierungen wie UTF-8 verwenden, verwenden Sie mb_substr anstelle von substr

Hier kann ich euch beide Beispiele zeigen:

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

LIVE DEMO

2
Faisal

Eine Zeichenfolge in verschiedenen Sprachen, einschließlich Cis und PHP, wird ebenfalls als ein Array von Zeichen betrachtet.

In dem Wissen, dass Array-Operationen theoretisch schneller sein sollten als String-Operationen, die Sie tun könnten,

$foo = "bar";


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

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

Standardarray funktioniert jedoch wie

count();

funktioniert nicht auf einer Zeichenfolge.

1
Petar Atanasov