2011-01-09 4 views
185
$str=':this is a applepie :) '; 

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

+0

Возможный дубликат [PHP Subtract First Character of String] (http://stackoverflow.com/questions/3592000/php-subtract-first-character-of-string) – Gordon

+0

Возможный дубликат [Удалить первые 4 символа string php] (http://stackoverflow.com/questions/4286423/remove-first-4-characters-of-a-string-php) – Gordon

+1

use substr ($ str, 1); –

ответ

229

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

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

Обратите внимание, что lrtim удалит все ':::::'. Иногда это нежелательное поведение. – CoR

+4

Обратите внимание, что это предназначено только для одиночных символов.ltrim будет обрезать все символы в предоставленной строке: 'ltrim ('prefixprefix_postfix', 'prefix')' приводит к '' _postfix '; ' –

440

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

$str = substr($str, 1); 

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

+26

Обратите внимание на unicode. Если вы имеете дело с произвольной строкой (например, «Ål <- датский для угря»), вы должны использовать mb_substr и указать кодировку. –

+0

Это не правильная реализация, она не работает с одиночной символьной строкой «a». если вы попробуете одиночную символьную строку, substr возвращает логическое значение – anru

+2

@anru В руководстве указано, будет ли длина строки равна начальному параметру, будет возвращена пустая строка. До версии 7 возвращалось 'false'. Поэтому вам нужно будет проверить, равны ли они, если это не то поведение, которое вы хотите. – rybo111

2

Кадрировка вхождений каждого слова в массиве с самого начала и конца строки + пробел и, возможно, дополнительных отдельных символов в соответствии с обычной отделкой()

<?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" 
?> 
9
$str = substr($str, 1); 

См PHP manual example 3

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

Примечание:

unset($str[0]) 

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

Fatal error: Cannot unset string offsets 
8

Update

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


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

$str[0] = ''; 

Например:

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

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

+0

Кажется, что это тоже быстрее. –

+0

@EmanuilRusev как так? Просто любопытно, если вы имеете в виду, что он быстрее набирает или работает быстрее. – rybo111

+0

Я имею в виду, что он работает быстрее. –

56

Exec время для 3-х ответов:

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

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

Exec время 1.000.000 тестов: 0.39602184295654 сек


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

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

Exec времени 1.000.000 испытаний: 5.153294801712 сек


Удалите первую букву с LTRIM()

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

Exec время 1.000.000 испытаний: 5.2393000125885 сек


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

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

Exec времени 1.000.000 испытаний: 6.8543920516968 сек

+0

Спасибо. См. Мое обновление. Это вызвало проблему для меня при использовании обновленной строки в SQL-запросе. – rybo111

+6

Я просто попробовал '$ str [0] = '';' решение, и он * не работал *. но, однако, если вы затем планируете использовать переменную, например, для сравнения '>' или '<', это не сработает. Он по-прежнему считается '' как + 'например ' $ str = 'hello'; $ str [0] = ''; var_dump ($ str); // string (5) 'ello'' – Ian

+0

@Ian: Я столкнулся с той же проблемой при извлечении записей из API с помощью ключевого слова, попробовал 'var_dump ($ keyword)', который показывал предыдущую длину символа .. тогда я попробовал обрезка ключевого слова, а затем он работал отлично 'var_dump (trim ($ keyword))' .. Надеюсь, это поможет кому-то .. :) –

1

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

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

Возможно, также внести свой вклад в ответы.

+1

этот не работает с одиночной символьной строкой: например, «a» – anru

+0

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

17

Вот код

$str = substr($str, 1); 

echo $str; 

Выход:

this is a applepie :) 
1

Принятая Ответ:

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

работает, но будет удалить несколько :, когда есть больше чем один в начале ,

$str = substr($str, 1); 

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

Однако

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

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

Смежные вопросы