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?
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?
Risposte:
substr("testers", -1); // returns "s"
Oppure, per le stringhe multibyte:
substr("multibyte string…", -1); // returns "…"
mb_substr
( php.net/mb_substr ).
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, prendi in considerazione l'uso della mb_*
famiglia di funzioni stringa.
A partire da PHP 7.1.0 sono supportati anche indici numerici negativi, ad esempio solo $string[-1];
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
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. suggerirei
substr(trim($string), -1)
EDIT: Il mio codice di seguito è stato modificato da qualcuno, facendo in modo che non facesse ciò che avevo 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);
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]
Su richiesta di un @mickmackusa, integra la mia risposta con possibili modi di applicazione:
<?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)
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
Ricorda, se hai una stringa che è stata letta come una riga da un file di testo usando la fgets()
funzione, devi usarla in substr($string, -3, 1)
modo da ottenere il carattere effettivo e non parte del CRLF (avanzamento riga di ritorno a capo).
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.
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 mostrarvi entrambi gli esempi:
<?php
echo substr("testers", -1);
echo mb_substr("testers", -1);
?>
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 />';
}
}
s($str)->end()
utile, come si trova in questa libreria autonoma .