¿Cómo eliminar el primer carácter de cadena en PHP?

Respuestas:

330

Para eliminar cada :desde el comienzo de una cadena, puede usar ltrim :

$str = '::f:o:';
$str = ltrim($str, ':');
var_dump($str); //=> 'f:o:'
Haim Evgi
fuente
109
Tenga en cuenta que lrtim eliminará todo :::::. A veces este no es el comportamiento deseado.
CDR
55
tenga en cuenta que esto solo está destinado a caracteres individuales. ltrim recortará todos los caracteres en la cadena proporcionada: ltrim('prefixprefix_postfix', 'prefix')resultados en'_postfix';
Cody Django
556

La substr()función probablemente te ayudará aquí:

 $str = substr($str, 1);

Las cadenas se indexan a partir de 0, y este segundo parámetro de funciones toma el corte inicial. Así que haz ese 1, y el primer personaje desaparecerá.

mario
fuente
35
Tenga cuidado con unicode. Si se trata de una cadena arbitraria (por ejemplo, "Ål <- danés para anguila"), debe usar mb_substr y especificar la codificación.
Thomas Jensen
esta no es una implementación correcta, no funciona con la cadena de caracteres "a". si intenta una cadena de un solo carácter, substr devuelve un valor booleano
anru
2
@anru El manual indica que si la longitud de la cadena es igual al parámetro de inicio, se devolverá una cadena vacía. Antes de la versión 7, falsefue devuelto. Por lo tanto, deberá verificar si son iguales si ese no es el comportamiento que desea.
rybo111
95

Utilice substr :

$str = substr($str, 1); // this is a applepie :)
alexn
fuente
Excelente respuesta! ¡Gracias por compartir! Sin embargo, no estoy seguro de entender el comentario en su código sobre applepie. oO
HoldOffHunger
64

Tiempo de ejecución para las 3 respuestas:

Quite la primera letra reemplazando el caso

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

Tiempo de ejecución para 1.000.000 de pruebas: 0.39602184295654seg.


Eliminar la primera letra con substr ()

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

Tiempo de ejecución para 1.000.000 de pruebas: 5.153294801712seg.


Elimina la primera letra con ltrim ()

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

Tiempo de ejecución para 1.000.000 de pruebas: 5.2393000125885seg.


Elimine la primera letra con preg_replace ()

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

Tiempo de ejecución para 1.000.000 de pruebas: 6.8543920516968seg.

Hayenn
fuente
Gracias. Ver mi actualización, sin embargo. Me causó un problema al usar la cadena actualizada en una consulta SQL.
rybo111
66
Acabo de probar la $str[0] = '';solución y no funcionó. bien, sin embargo, si planea usar la variable, por ejemplo, para comparar >o <no funcionará. Todavía cuenta `` como + 'por ejemplo $str = 'hello'; $str[0] = ''; var_dump($str); // string(5) 'ello'
Ian
@ Ian: Me encontré con el mismo problema al buscar registros de una API usando una palabra clave, probé var_dump($keyword)que mostraba la longitud del carácter anterior ... luego intenté recortar la palabra clave y luego funcionó bien var_dump(trim($keyword))... Espero que esto ayude a alguien ... :)
Syed Qarib
3
Esto no funciona. La posición "eliminada" se reemplaza con un byte nulo, por lo que obtiene "\ 0hello" en lugar de "hola".
Josef Kufner
1
Me aparece "Advertencia: no se puede asignar una cadena vacía a un desplazamiento de cadena" para $ str [0] = "";
Francisco Luz
25

Aqui esta el codigo

$str = substr($str, 1); 

echo $str;

Salida:

this is a applepie :)
Tarun modi
fuente
11

Para eliminar el primer carácter de la cadena en PHP,

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

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

Vea el ejemplo 3 del manual de PHP

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

Nota:

unset($str[0]) 

no funcionará ya que no puede desarmar parte de una cadena: -

Fatal error: Cannot unset string offsets
Gammerz
fuente
9

Actualizar

Después de más pruebas, ya no recomiendo usar esto. Me causó un problema al usar la cadena actualizada en una consulta MySQL y al cambiar para substrsolucionar el problema. Pensé en eliminar esta respuesta, pero los comentarios sugieren que es más rápido de alguna manera para que alguien pueda usarla. Puede encontrar que recortar la cadena actualizada resuelve problemas de longitud de cadena.


A veces no necesitas una función:

$str[0] = '';

Por ejemplo:

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

Este método modifica la cadena existente en lugar de crear otra.

rybo111
fuente
Esto parece ser más rápido también.
Emanuil Rusev
@EmanuilRusev ¿cómo es eso? Es curioso si quieres decir que es más rápido escribir o se ejecuta más rápido.
rybo111
Quiero decir que corre más rápido.
Emanuil Rusev
@EmanuilRusev Me interesaría si pudiera proporcionar algunas estadísticas, ya que agregaré a la respuesta.
rybo111
1
Tengo que tener cuidado con esto. El siguiente código genera bool (falso). $ foo = 'libro'; $ bar = 'libro'; $ bar = substr ($ bar, 1); $ foo [0] = ''; var_dump ($ foo === $ bar);
aunquetretrepo
8

La respuesta aceptada:

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

funciona, pero eliminará múltiples :cuando haya más de uno al inicio.

$str = substr($str, 1);

eliminará cualquier personaje desde el principio.

Sin embargo,

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

funciona perfectamente.

Dan Bray
fuente
6

puedes usar la función 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
fuente
2

Recorta las apariciones de cada palabra en una matriz desde el principio y el final de una cadena + espacio en blanco y, opcionalmente, caracteres individuales adicionales según el recorte 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
fuente
1

El código me funciona bien.

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

Quizás, contribuya con respuestas también.

Claudionor Oliveira
fuente
1
este no funciona con una cadena de un solo carácter: como "a"
anru
Tienes razón =) Entonces, cree que una posible solución sería probar antes de que solo contenga un personaje. Por ejemplo: $ str = strlen ($ str)> 1? substr ($ str, - (strlen ($ str) -1)): $ str; O $ str = strlen ($ str)> 1? substr ($ str, - (strlen ($ str) -1)): ''; porque la idea es eliminar el último personaje, si solo tienes uno ...: P
Claudionor Oliveira
1

utilizar la función mb_substr

    mb_substr("我abc", 1);
风声 猎猎
fuente
Útil si el personaje es un símbolo de moneda.
Raymie