PHP에서 문자열의 첫 문자를 제거하는 방법?


답변:


330

:문자열의 시작 부분에서 모든 것을 제거하려면 ltrim 을 사용할 수 있습니다 .

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

109
lrtim은 모두 제거합니다 :::::. 때때로 이것은 바람직한 동작이 아닙니다.
CoR

5
이것은 단일 문자만을위한 것입니다. ltrim은 제공된 문자열에서 모든 문자를 다듬습니다. ltrim('prefixprefix_postfix', 'prefix')결과'_postfix';
Cody Django

556

substr()기능은 아마도 당신을 도울 것입니다 :

 $str = substr($str, 1);

문자열은 0부터 시작하여 색인화되며이 함수의 두 번째 매개 변수는 cutstart를 사용합니다. 1로하면 첫 번째 문자가 사라집니다.


35
유니 코드에 유의하십시오. 임의의 문자열 (예 : "Ål <-danish for eel")을 다루는 경우 mb_substr을 사용하고 인코딩을 지정해야합니다.
Thomas Jensen

이것은 올바른 구현이 아니며 단일 문자열 "a"로 작동하지 않습니다. 단일 문자열을 시도하면 substr은 부울 값을 반환합니다
anru

2
@anru 문자열 길이가 시작 매개 변수와 같으면 빈 문자열이 리턴됩니다. 버전 7 이전 false에 리턴되었습니다. 따라서 원하는 동작이 아닌지 확인해야합니다.
rybo111

95

substr 사용 :

$str = substr($str, 1); // this is a applepie :)

훌륭한 답변! 공유해 주셔서 감사합니다! 그래도 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


감사. 그래도 내 업데이트를 참조하십시오. SQL 쿼리에서 업데이트 된 문자열을 사용할 때 문제가 발생했습니다.
rybo111

6
방금 $str[0] = '';해결책을 시도했지만 작동 하지 않았습니다 . 잘은 다음 비교 예를 들어 변수를 사용할 계획이라면 그러나 않습니다 >또는 <이 작동하지 않습니다. 예를 들어``+를 +로 계산합니다 $str = 'hello'; $str[0] = ''; var_dump($str); // string(5) 'ello'
Ian

@Ian : 키워드를 사용하여 API에서 레코드를 가져 오는 동안 동일한 문제가 발생 var_dump($keyword)하여 이전 문자 길이를 표시하려고 시도했습니다. 키워드를 잘라 내고 정상적으로 작동했습니다 var_dump(trim($keyword)).
Syed Qarib

3
작동하지 않습니다. "제거 된"위치는 널 바이트로 바뀌므로 "hello"대신 "\ 0hello"가 표시됩니다.
Josef Kufner

1
$ str [0] = ""에 대해 "경고 : 빈 문자열을 문자열 오프셋에 할당 할 수 없습니다"라는 메시지가 나타납니다.
Francisco Luz

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

9

최신 정보

추가 테스트 후에는 더 이상 사용하지 않는 것이 좋습니다. MySQL 쿼리에서 업데이트 된 문자열을 사용하고 문제를 해결하도록 변경 substr하면 문제가 발생했습니다. 이 답변을 삭제하는 것에 대해 생각했지만 의견에 따르면 누군가가 더 빨리 사용할 수 있다고 제안합니다. 업데이트 된 문자열을 자르면 문자열 길이 문제가 해결 될 수 있습니다.


때로는 기능이 필요하지 않습니다.

$str[0] = '';

예를 들면 다음과 같습니다.

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

이 메소드는 다른 문자열을 작성하지 않고 기존 문자열을 수정합니다.


이것도 더 빠른 것 같습니다.
Emanuil Rusev

@EmanuilRusev 어떻게 그렇게? 입력하기가 더 빠르거나 더 빨리 실행된다는 것이 궁금하다면 궁금합니다.
rybo111

나는 그것이 더 빨리 실행된다는 것을 의미합니다.
Emanuil Rusev

@EmanuilRusev 답변에 추가 할 통계를 제공 할 수 있다면 관심이 있습니다.
rybo111

1
이것을 조심해야합니다. 아래 코드는 bool (false)를 출력합니다. $ foo = '책'; $ bar = '책'; $ bar = substr ($ bar, 1); $ foo [0] = ''; var_dump ($ foo === $ bar);
thinkrepo

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

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

1

코드가 잘 작동합니다.

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

어쩌면 대답도 함께 공헌하십시오.


1
이 문자열은 단일 문자열로 작동하지 않습니다 : "a"
anru

당신이 맞습니다 =) 따라서 가능한 해결책은 문자가 하나만 포함되기 전에 테스트하는 것이라고 생각하십시오. 예를 들면 : $ str = strlen ($ str)> 1? substr ($ str,-(strlen ($ str) -1)) : $ str; 또는 $ str = strlen ($ str)> 1? substr ($ str,-(strlen ($ str) -1)) : ''; 아이디어는 하나만있는 경우, 마지막 문자를 제거 할 수 있기 때문에 ... : P
Claudionor 올리베이라

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.