Как удалить первый символ строки в PHP?

Ответы:

330

Чтобы удалить каждый :из начала строки, вы можете использовать ltrim :

$str = '::f:o:';
$str = ltrim($str, ':');
var_dump($str); //=> 'f:o:'
Хаим Евги
источник
109
Обратите внимание, что lrtim удалит все :::::. Иногда это нежелательное поведение.
CoR
5
обратите внимание, что это предназначено только для отдельных символов. Итрим обрежет все символы в предоставленной строке: ltrim('prefixprefix_postfix', 'prefix')результаты'_postfix';
Коди Джанго,
556

substr()Функция, вероятно , поможет вам здесь:

 $str = substr($str, 1);

Строки индексируются, начиная с 0, и второй параметр этой функции принимает начало отсечения. Так что сделайте это 1, и первый символ исчезнет.

марио
источник
35
Знать о юникоде Если вы имеете дело с произвольной строкой (например, «Ål <- danish for eel»), вам следует использовать mb_substr и указать кодировку.
Томас Дженсен
это неправильная реализация, она не работает с односимвольной строкой «а». если вы попробуете односимвольную строку, substr вернет логическое значение
anru
2
@anru Руководство устанавливает, что если длина строки равна параметру start, будет возвращена пустая строка. До версии 7 falseбыл возвращен. Таким образом, вам нужно проверить, равны ли они, если это не то поведение, которое вы хотите.
rybo111
95

Используйте substr :

$str = substr($str, 1); // this is a applepie :)
AlexN
источник
Отличный ответ! Спасибо, что поделился! Не совсем уверен, что я понимаю комментарий в вашем коде о applepie, хотя. oO
HoldOffHunger
64

Время выполнения для 3 ответов:

Удалить первую букву, заменив корпус

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

Время выполнения для 1.000.000 тестов: 0.39602184295654сек


Удалите первую букву с помощью substr ()

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

Время выполнения для 1.000.000 тестов: 5.153294801712сек


Удалите первую букву с помощью ltrim ()

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

Время выполнения для 1.000.000 тестов: 5.2393000125885сек


Удалите первую букву с помощью preg_replace ()

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

Время выполнения для 1.000.000 тестов: 6.8543920516968сек

Hayenn
источник
Спасибо. Смотрите мое обновление, хотя. Это вызвало проблему при использовании обновленной строки в запросе SQL.
rybo111
6
Я просто попробовал $str[0] = '';решение, и оно не сработало. хорошо это делает , однако , если вы потом планируете использовать переменную, например , сравнивать >или <она не будет работать. Например, он по-прежнему считается `` as + `' $str = 'hello'; $str[0] = ''; var_dump($str); // string(5) 'ello'
Ян
@Ian: Я столкнулся с той же проблемой, когда извлекал записи из API с использованием ключевого слова, пытался var_dump($keyword)показать предыдущую длину символа ... затем я попытался обрезать ключевое слово, а затем все заработало нормально var_dump(trim($keyword))... Надеюсь, это кому-нибудь поможет ... :)
Сайед Кариб
3
Это не работает. Позиция «удален» заменяется нулевым байтом, поэтому вместо «привет» вы получаете «\ 0hello».
Йозеф Куфнер
1
Я получаю "Предупреждение: Невозможно назначить пустую строку для смещения строки" для $ str [0] = "";
Франциско Луз
25

Вот код

$str = substr($str, 1); 

echo $str;

Вывод:

this is a applepie :)
Тарун Моди
источник
11

Чтобы удалить первый символ строки в PHP,

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

echo $new_string;
Generates: "bcdef"
Чандан Шарма
источник
9
$str = substr($str, 1);

Смотрите PHP пример 3

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

Примечание:

unset($str[0]) 

не будет работать, так как вы не можете удалить часть строки: -

Fatal error: Cannot unset string offsets
Gammerz
источник
9

Обновить

После дальнейших испытаний я не рекомендую использовать это больше. Это вызвало проблему для меня при использовании обновленной строки в запросе MySQL и изменении на substrисправленную проблему. Я думал об удалении этого ответа, но комментарии предполагают, что он как-то быстрее, так что кто-то может его использовать. Вы можете обнаружить, что обрезка обновленной строки решает проблемы длины строки.


Иногда вам не нужна функция:

$str[0] = '';

Например:

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

Этот метод изменяет существующую строку, а не создает другую.

rybo111
источник
Кажется, это тоже быстрее.
Эмануил Русев
@EmanuilRusev как так? Просто любопытно, если ты имеешь в виду, что он быстрее печатается или работает быстрее.
rybo111
Я имею в виду, что это работает быстрее.
Эмануил Русев
@EmanuilRusev Мне было бы интересно, если бы вы могли предоставить некоторые статистические данные, поскольку я добавлю к ответу.
rybo111
1
Должен быть осторожен с этим. Код ниже выводит bool (false). $ foo = 'book'; $ bar = 'book'; $ bar = substr ($ bar, 1); $ foo [0] = ''; var_dump ($ foo === $ bar);
мысльrepo
8

Принятый ответ:

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

работает, но удалит несколько, :когда их будет больше одного.

$str = substr($str, 1);

удалит любого персонажа с самого начала.

Тем не мение,

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

работает отлично.

Дэн Брей
источник
6

Вы можете использовать функцию sbstr ()

$amount = 1;   //where $amount the the amount of string you want to delete starting  from index 0
$str = substr($str, $amount);
Адехо Эммануэль IMM
источник
2

Обрезает вхождения каждого слова в массиве из начала и конца строки + пробел и, возможно, дополнительные одиночные символы в соответствии с обычным 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

Код хорошо работает для меня.

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

Может быть, помочь с ответами тоже.

Клаудионор Оливейра
источник
1
этот не работает с односимвольной строкой: как «а»
анру
Вы правы =) Итак, поверьте, что возможным решением было бы проверить, прежде чем оно будет содержать только один символ. Например: $ str = strlen ($ str)> 1? substr ($ str, - (strlen ($ str) -1)): $ str; Или $ str = strlen ($ str)> 1? substr ($ str, - (strlen ($ str) -1)): ''; потому что идея состоит в том, чтобы удалить последний символ, если у вас есть только один ...: P
Клаудионор Оливейра
1

использовать функцию mb_substr

    mb_substr("我abc", 1);
风声 猎猎
источник
Полезно, если символ является символом валюты.
Рэйми