Como remover o primeiro caractere de string no PHP?

Respostas:

330

Para remover todos :os itens desde o início de uma string, você pode usar ltrim :

$str = '::f:o:';
$str = ltrim($str, ':');
var_dump($str); //=> 'f:o:'
Haim Evgi
fonte
109
Observe que o lrtim removerá tudo :::::. Às vezes, esse não é o comportamento desejado.
CR
5
observe que isso é destinado apenas a caracteres únicos. O ltrim cortará todos os caracteres da string fornecida: ltrim('prefixprefix_postfix', 'prefix')resulta em'_postfix';
Cody Django
556

A substr()função provavelmente o ajudará aqui:

 $str = substr($str, 1);

As strings são indexadas a partir de 0 e este segundo parâmetro de funções assume o cutstart. Portanto, faça 1 e o primeiro caractere desapareceu.

mario
fonte
35
Esteja ciente do unicode. Se você estiver lidando com uma string arbitrária (por exemplo, "Ål <- dinamarquês para enguia"), use mb_substr e especifique a codificação.
Thomas Jensen
essa não é uma implementação correta, não está funcionando com a cadeia de caracteres únicos "a". se você tentar cadeia de caracteres única, substr retorna um valor booleano
anru
2
@anru O manual indica se o comprimento da string é igual ao parâmetro start, uma string vazia será retornada. Antes da versão 7, falsefoi retornado. Então, você precisa verificar se eles são iguais, se esse não é o comportamento que você deseja.
Rybo111
95

Usar substr :

$str = substr($str, 1); // this is a applepie :)
alexn
fonte
Excelente resposta! Obrigado por compartilhar! Não tenho muita certeza de entender o comentário no seu código sobre o applepie. oO
HoldOffHunger 14/06
64

Tempo de execução para as 3 respostas:

Remova a primeira letra substituindo o caso

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

Tempo de execução para 1.000.000 de testes: 0.39602184295654seg


Remova a primeira letra com substr ()

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

Tempo de execução para 1.000.000 de testes: 5.153294801712seg


Remova a primeira letra com ltrim ()

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

Tempo de execução para 1.000.000 de testes: 5.2393000125885seg


Remova a primeira letra com preg_replace ()

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

Tempo de execução para 1.000.000 de testes: 6.8543920516968seg

Hayenn
fonte
Obrigado. Veja minha atualização, no entanto. Isso causou um problema para mim ao usar a string atualizada em uma consulta SQL.
rybo111
6
Eu apenas tentei a $str[0] = '';solução e não funcionou. bem, no entanto, se você planeja usar a variável, por exemplo, para comparar >ou <ela não funcionará. Ainda conta `` como + `por exemplo $str = 'hello'; $str[0] = ''; var_dump($str); // string(5) 'ello'
Ian
@Ian: Me deparei com o mesmo problema ao buscar registros de uma API usando uma palavra-chave, tentei var_dump($keyword)mostrar o tamanho do caractere anterior ... tentei aparar a palavra-chave e funcionou bem var_dump(trim($keyword)).. Espero que isso ajude alguém .. :)
Syed Qarib 08/0315
3
Isso não funciona. A posição "removida" é substituída por byte nulo, para que você obtenha "\ 0hello" em vez de "hello".
Josef Kufner
1
Recebo "Aviso: não é possível atribuir uma string vazia a um deslocamento de string" por $ str [0] = "";
Francisco Luz
25

Aqui está o código

$str = substr($str, 1); 

echo $str;

Resultado:

this is a applepie :)
Tarun modi
fonte
11

Para remover o primeiro caractere da string no PHP,

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

echo $new_string;
Generates: "bcdef"
Chandan Sharma
fonte
9
$str = substr($str, 1);

Veja o exemplo 3 do manual do PHP

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

Nota:

unset($str[0]) 

não funcionará porque você não pode desmarcar parte de uma sequência: -

Fatal error: Cannot unset string offsets
Gammerz
fonte
9

Atualizar

Depois de mais testes, não recomendo mais usar isso. Isso causou um problema para mim ao usar a string atualizada em uma consulta MySQL e alterar para substrcorrigir o problema. Pensei em excluir esta resposta, mas os comentários sugerem que é mais rápido, de alguma forma, para que alguém possa usá-la. Você pode achar que aparar a string atualizada resolve problemas de comprimento da string.


Às vezes você não precisa de uma função:

$str[0] = '';

Por exemplo:

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

Este método modifica a cadeia existente em vez de criar outra.

rybo111
fonte
Isso parece ser mais rápido também.
Emanuil Rusev
@EmanuilRusev como assim? Apenas curioso, se você quer dizer que é mais rápido digitar ou roda mais rápido.
precisa saber é o seguinte
Quero dizer que corre mais rapidamente.
Emanuil Rusev
@EmanuilRusev Eu estaria interessado se você pudesse fornecer algumas estatísticas, pois adicionarei à resposta.
precisa saber é o seguinte
1
Tem que ter cuidado com isso. O código abaixo gera bool (false). $ foo = 'livro'; $ bar = 'livro'; $ bar = substr ($ bar, 1); $ foo [0] = ''; var_dump ($ foo === $ bar);
thoughtrepo
8

A resposta aceita:

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

funciona, mas removerá vários :quando houver mais de um no início.

$str = substr($str, 1);

irá remover qualquer caractere desde o início.

Contudo,

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

funciona perfeitamente.

Dan Bray
fonte
6

você pode usar a função sbstr ()

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

Apara as ocorrências de todas as palavras de uma matriz desde o início e o final de uma sequência de caracteres + espaço em branco e, opcionalmente, caracteres únicos extras, conforme o corte normal ()

<?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"
?>
Ben
fonte
1

O código funciona bem para mim.

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

Talvez, contribua com respostas também.

Claudionor Oliveira
fonte
1
este não está funcionando com cadeia de caracteres únicos: como "a"
anru 26/10/2015
Você está certo =) Portanto, acredite que uma solução possível seria testar antes de conter apenas um caractere. Por exemplo: $ str = strlen ($ str)> 1? substr ($ str, - (strlen ($ str) -1)): $ str; Ou $ str = strlen ($ str)> 1? substr ($ str, - (strlen ($ str) -1)): ''; porque a idéia é remover o último caractere, se você tiver apenas um ...: P
Claudionor Oliveira
1

use a função mb_substr

    mb_substr("我abc", 1);
风声 猎猎
fonte
Útil se o caractere for um símbolo de moeda.
Raymie