Come ottenere l'ultimo carattere di una stringa in PHP?

2010-04-21 php string

Devo ottenere l'ultimo carattere di una stringa. Supponiamo di avere "tester" come stringa di input e voglio che il risultato sia "s". come posso farlo in PHP?

Answers

substr($string, -1) 
substr("testers", -1); // returns "s"

Oppure, per le stringhe multibyte:

substr("multibyte string…", -1); // returns "…"

O tramite accesso diretto alla stringa :

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

Si noti che questo non funziona per le stringhe multibyte. Se devi lavorare con una stringa multibyte, considera l'utilizzo della famiglia di funzioni mb_* string.

A partire da PHP 7.1.0 sono supportati anche indici numerici negativi, ad esempio solo $string[-1];

Ricorda, se hai una stringa che è stata letta come una riga da un file di testo usando la funzione fgets() , devi usare substr($string, -3, 1) modo da ottenere il carattere effettivo e non parte del CRLF (avanzamento riga ritorno carrello).

Non penso che la persona che ha posto la domanda abbia bisogno di questo, ma per me ho avuto problemi a ottenere l'ultimo carattere da una stringa da un file di testo, quindi sono sicuro che altri incontreranno problemi simili.

Non posso lasciare commenti, ma per quanto riguarda la risposta di FastTrack, ricordo anche che la fine della riga può essere solo di un singolo carattere. io suggerirei

substr(trim($string), -1)

EDIT: Il mio codice di seguito è stato modificato da qualcuno, facendo in modo che non faccia ciò che ho indicato. Ho ripristinato il mio codice originale e modificato il testo per renderlo più chiaro.

trim (o rtrim ) rimuoverà tutti gli spazi bianchi, quindi se è necessario controllare uno spazio, una scheda o un altro spazio bianco, sostituire prima manualmente le varie terminazioni di riga:

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

Consiglio di optare per la soluzione di Gordon in quanto è più performante di 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();

produce qualcosa di simile

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

 substr() took 2.0285921096802seconds 
 array access took 1.7474739551544seconds

Da PHP 7.1 puoi farlo ( rfc accettato per offset di stringhe negative ):

<?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();

Ti faccio indovinare l'output.

Inoltre, ho aggiunto questo al codice delle prestazioni di xenonite con questi risultati:

substr () ha impiegato 7.0334868431091 secondi

l'accesso alla matrice ha richiesto 2.3111131191254 secondi

L'accesso diretto alla stringa (offset di stringa negativo) ha richiesto 1.7971360683441 secondi

Puoi trovare l'ultimo carattere usando php in molti modi come substr () e mb_substr () .

Se si utilizzano codifiche di caratteri multibyte come UTF-8, utilizzare mb_substr invece di substr

Qui posso mostrarti entrambi esempi:

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

DIMOSTRAZIONE DAL VIVO

Una stringa in diverse lingue tra cui C sharp e PHP è anche considerata una matrice di caratteri.

Sapendo che in teoria le operazioni di array dovrebbero essere più veloci di quelle di stringa che potresti fare,

$foo = "bar";


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

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

Tuttavia, funzioni di array standard come

count();

non funzionerà su una stringa.

Siemano, ottieni solo file php dalla directory selezionata:

$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 />';
  }
}

A partire da PHP 7.1.0, sono supportati anche offset di stringa negativi. Quindi, se stai al passo con i tempi, puoi accedere all'ultimo carattere della stringa in questo modo:

$str[-1]

DEMO

Related