¿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:'

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á.


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 :)

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.


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 :)

11

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

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

echo $new_string;
Generates: "bcdef"

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

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.


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.


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

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"
?>

1

El código me funciona bien.

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

Quizás, contribuya con respuestas también.


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.