Come rimuovere il primo carattere di stringa in PHP?


Risposte:


330

Per rimuovere ogni :dall'inizio di una stringa, puoi usare ltrim :

$str = '::f:o:';
$str = ltrim($str, ':');
var_dump($str); //=> 'f:o:'

109
Nota che lrtim rimuoverà tutto :::::. A volte questo non è il comportamento desiderato.
CdR

5
si noti che questo è destinato solo a singoli caratteri. ltrim taglierà tutti i caratteri nella stringa fornita: ltrim('prefixprefix_postfix', 'prefix')risultati in'_postfix';
Cody Django

556

La substr()funzione probabilmente ti aiuterà qui:

 $str = substr($str, 1);

Le stringhe sono indicizzate a partire da 0 e questo secondo parametro di funzioni accetta il cutstart. Quindi crealo 1 e il primo carattere è sparito.


35
Sii consapevole dell'unicode. Se hai a che fare con una stringa arbitraria (es. "Ål <- danish for eel"), dovresti usare mb_substr e specificare la codifica.
Thomas Jensen,

questa non è un'implementazione corretta, non funziona con la stringa di caratteri singoli "a". se provi una stringa a singolo carattere, substr restituisce un valore booleano
tra il

2
@anru Il manuale indica se la lunghezza della stringa è uguale al parametro start, verrà restituita una stringa vuota. Prima della versione 7, è falsestato restituito. Quindi dovresti controllare se sono uguali se questo non è il comportamento che desideri.
Rybo111,

95

Usa substr :

$str = substr($str, 1); // this is a applepie :)

Risposta eccellente! Grazie per la condivisione! Non sono sicuro di aver capito il commento nel tuo codice su Applepie, comunque. oO
HoldOffHunger

64

Tempo di esecuzione delle 3 risposte:

Rimuovi la prima lettera sostituendo la custodia

$str = "hello";
$str[0] = "";
// $str[0] = false;
// $str[0] = null;
// replaced by �, but ok for echo

Tempo di esecuzione per 1.000.000 di test: 0.39602184295654sec


Rimuovi la prima lettera con substr ()

$str = "hello";
$str = substr($str, 1);

Tempo di esecuzione per 1.000.000 di test: 5.153294801712sec


Rimuovi la prima lettera con ltrim ()

$str = "hello";
$str= ltrim ($str,'h');

Tempo di esecuzione per 1.000.000 di test: 5.2393000125885sec


Rimuovi la prima lettera con preg_replace ()

$str = "hello";
$str = preg_replace('/^./', '', $str);

Tempo di esecuzione per 1.000.000 di test: 6.8543920516968sec


Grazie. Vedi il mio aggiornamento, però. Mi ha causato un problema durante l'utilizzo della stringa aggiornata in una query SQL.
Rybo111,

6
Ho appena provato la $str[0] = '';soluzione e non ha funzionato. bene, tuttavia, se si prevede di utilizzare la variabile per esempio per confrontare >o <non funzionerà. Conta ancora `` come + `per esempio $str = 'hello'; $str[0] = ''; var_dump($str); // string(5) 'ello'
Ian

@Ian: ho riscontrato lo stesso problema durante il recupero dei record da un'API utilizzando una parola chiave, var_dump($keyword)ho provato che mostrava la lunghezza del carattere precedente .. poi ho provato a tagliare la parola chiave e poi ha funzionato bene var_dump(trim($keyword)).. Spero che questo aiuti qualcuno .. :)
Syed Qarib

3
Questo non funziona. La posizione "rimosso" viene sostituita con byte null, in modo da ottenere "\ 0hello" anziché "hello".
Josef Kufner,

1
Ottengo "Avviso: impossibile assegnare una stringa vuota a un offset di stringa" per $ str [0] = "";
Francisco Luz,

25

Ecco il codice

$str = substr($str, 1); 

echo $str;

Produzione:

this is a applepie :)

11

Per rimuovere il primo carattere della stringa in PHP,

$string = "abcdef";     
$new_string = substr($string, 1);

echo $new_string;
Generates: "bcdef"

9
$str = substr($str, 1);

Vedi il manuale di esempio 3 di PHP

echo substr('abcdef', 1);     // bcdef

Nota:

unset($str[0]) 

non funzionerà poiché non è possibile annullare l'impostazione di una parte di una stringa: -

Fatal error: Cannot unset string offsets

9

Aggiornare

Dopo ulteriori test, non consiglio di usarlo più. Mi ha causato un problema quando ho usato la stringa aggiornata in una query MySQL e ho cambiato substril problema. Ho pensato di eliminare questa risposta, ma i commenti suggeriscono che è più veloce in qualche modo, quindi qualcuno potrebbe averne un uso. È possibile che il taglio della stringa aggiornata risolva i problemi di lunghezza della stringa.


A volte non hai bisogno di una funzione:

$str[0] = '';

Per esempio:

$str = 'AHello';
$str[0] = '';
echo $str; // 'Hello'

Questo metodo modifica la stringa esistente anziché crearne un'altra.


Anche questo sembra essere più veloce.
Emanuil Rusev,

@EmanuilRusev come è così? Solo curioso se intendi che è più veloce da scrivere o se corre più veloce.
Rybo111,

Voglio dire che funziona più rapidamente.
Emanuil Rusev,

@EmanuilRusev Sarei interessato se potessi fornire alcune statistiche come aggiungerò alla risposta.
Rybo111,

1
Devo stare attento con questo. Il codice seguente genera bool (false). $ foo = 'libro'; $ bar = 'libro'; $ bar = substr ($ bar, 1); $ foo [0] = ''; var_dump ($ foo === $ bar);
Thoughrepo,

8

La risposta accettata:

$str = ltrim($str, ':');

funziona ma rimuoverà più :quando ce ne sono più di uno all'inizio.

$str = substr($str, 1);

rimuoverà qualsiasi personaggio dall'inizio.

Però,

if ($str[0] === ':')
    $str = substr($str, 1);

funziona perfettamente.


6

puoi usare la funzione sbstr ()

$amount = 1;   //where $amount the the amount of string you want to delete starting  from index 0
$str = substr($str, $amount);

2

Taglia le occorrenze di ogni parola in un array dall'inizio e dalla fine di una stringa + spazi bianchi e, facoltativamente, caratteri singoli extra come da normale trim ()

<?php
function trim_words($what, $words, $char_list = '') {
    if(!is_array($words)) return false;
    $char_list .= " \t\n\r\0\x0B"; // default trim chars
    $pattern = "(".implode("|", array_map('preg_quote', $words)).")\b";
    $str = trim(preg_replace('~'.$pattern.'$~i', '', preg_replace('~^'.$pattern.'~i', '', trim($what, $char_list))), $char_list);
    return $str;
}

// for example:
$trim_list = array('AND', 'OR');

$what = ' OR x = 1 AND b = 2 AND ';
print_r(trim_words($what, $trim_list)); // => "x = 1 AND b = 2"

$what = ' ORDER BY x DESC, b ASC, ';
print_r(trim_words($what, $trim_list, ',')); // => "ORDER BY x DESC, b ASC"
?>

1

Il codice funziona bene per me.

$str = substr($str ,-(strlen($str)-1));

Forse, contribuisci anche con le risposte.


1
questo non funziona con una stringa a singolo carattere: come "a"
anru

Hai ragione =) Quindi, credi che una possibile soluzione sarebbe testare prima che contenga solo un carattere. Ad esempio: $ str = strlen ($ str)> 1? substr ($ str, - (strlen ($ str) -1)): $ str; O $ str = strlen ($ str)> 1? substr ($ str, - (strlen ($ str) -1)): ''; perché l'idea è di rimuovere l'ultimo personaggio, se ne hai solo uno ...: P
Claudionor Oliveira,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.