Làm thế nào để loại bỏ ký tự đầu tiên của chuỗi trong PHP?


Câu trả lời:


330

Để xóa mọi thứ :từ đầu chuỗi, bạn có thể sử dụng ltrim :

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

109
Lưu ý rằng lrtim sẽ loại bỏ tất cả :::::. Đôi khi đây không phải là hành vi mong muốn.
CoR

5
lưu ý rằng điều này chỉ dành cho các ký tự đơn. ltrim sẽ cắt tất cả các ký tự trong chuỗi được cung cấp: ltrim('prefixprefix_postfix', 'prefix')kết quả trong'_postfix';
Cody Django

556

Các substr()chức năng có thể sẽ giúp bạn ở đây:

 $str = substr($str, 1);

Các chuỗi được lập chỉ mục bắt đầu từ 0 và tham số thứ hai này có chức năng cắt. Vì vậy, làm cho 1, và char đầu tiên đã biến mất.


35
Hãy nhận biết về unicode. Nếu bạn đang xử lý một chuỗi tùy ý (ví dụ: "Ål <- Đan Mạch cho lươn"), bạn nên sử dụng mb_substr và chỉ định mã hóa.
Thomas Jensen

Đây không phải là một triển khai chính xác, nó không hoạt động với chuỗi ký tự đơn "a". nếu bạn thử chuỗi ký tự đơn, giá trị trả về giá trị boolean
anru

2
@anru Các trạng thái thủ công nếu độ dài chuỗi bằng với tham số bắt đầu, một chuỗi trống sẽ được trả về. Trước phiên bản 7, falseđã được trả lại. Vì vậy, bạn sẽ cần kiểm tra xem chúng có bằng nhau không nếu đó không phải là hành vi bạn muốn.
rybo111

95

Sử dụng substr :

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

Câu trả lời tuyệt vời! Cám ơn vì đã chia sẻ! Mặc dù không chắc chắn tôi hiểu nhận xét trong mã của bạn về applepie. oO
Hold OfferHunger

64

Thời gian thực hiện cho 3 câu trả lời:

Xóa chữ cái đầu tiên bằng cách thay thế trường hợp

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

Thời gian thực hiện cho 1.000.000 bài kiểm tra: 0.39602184295654giây


Xóa chữ cái đầu tiên với chất nền ()

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

Thời gian thực hiện cho 1.000.000 bài kiểm tra: 5.153294801712giây


Xóa chữ cái đầu tiên bằng ltrim ()

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

Thời gian thực hiện cho 1.000.000 bài kiểm tra: 5.2393000125885giây


Xóa chữ cái đầu tiên bằng preg numplace ()

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

Thời gian thực hiện cho 1.000.000 bài kiểm tra: 6.8543920516968giây


Cảm ơn. Xem cập nhật của tôi, mặc dù. Nó gây ra sự cố cho tôi khi sử dụng chuỗi cập nhật trong truy vấn SQL.
rybo111

6
Tôi chỉ thử $str[0] = '';giải pháp và nó không hoạt động. tuy nhiên, nếu bạn dự định sử dụng biến này để so sánh >hoặc <nó sẽ không hoạt động. Nó vẫn được tính là `` như + `chẳng hạn $str = 'hello'; $str[0] = ''; var_dump($str); // string(5) 'ello'
Ian

@Ian: Tôi đã gặp phải vấn đề tương tự trong khi tìm nạp các bản ghi từ API bằng từ khóa, đã thử var_dump($keyword)hiển thị độ dài ký tự trước đó .. sau đó tôi đã thử cắt từ khóa và sau đó nó hoạt động tốt var_dump(trim($keyword)).. Hy vọng điều này sẽ giúp được ai đó .. :)
Syed Qarib 8/03/2015

3
Điều này không hoạt động. Vị trí "đã xóa" được thay thế bằng byte null, do đó bạn nhận được "\ 0hello" thay vì "xin chào".
Josef Kufner

1
Tôi nhận được "Cảnh báo: Không thể gán một chuỗi rỗng cho chuỗi bù" cho $ str [0] = "";
Francisco Luz

25

Đây là mã

$str = substr($str, 1); 

echo $str;

Đầu ra:

this is a applepie :)

11

Để xóa ký tự đầu tiên của chuỗi trong PHP,

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

echo $new_string;
Generates: "bcdef"

9
$str = substr($str, 1);

Xem ví dụ hướng dẫn sử dụng PHP 3

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

Ghi chú:

unset($str[0]) 

sẽ không hoạt động vì bạn không thể bỏ đặt một phần của chuỗi: -

Fatal error: Cannot unset string offsets

9

Cập nhật

Sau khi thử nghiệm thêm, tôi không khuyên bạn nên sử dụng điều này nữa. Nó gây ra sự cố cho tôi khi sử dụng chuỗi cập nhật trong truy vấn MySQL và thay đổi để substrkhắc phục sự cố. Tôi đã nghĩ về việc xóa câu trả lời này, nhưng ý kiến ​​cho thấy nó nhanh hơn bằng cách nào đó để ai đó có thể sử dụng nó. Bạn có thể tìm thấy việc cắt xén chuỗi cập nhật giải quyết các vấn đề về độ dài chuỗi.


Đôi khi bạn không cần một chức năng:

$str[0] = '';

Ví dụ:

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

Phương thức này sửa đổi chuỗi hiện có thay vì tạo chuỗi khác.


Điều này dường như cũng nhanh hơn.
Emanuil Rusev

@EmanuilRusev làm sao vậy? Chỉ tò mò nếu bạn muốn gõ nhanh hơn hoặc nó chạy nhanh hơn.
rybo111

Tôi có nghĩa là nó chạy nhanh hơn.
Emanuil Rusev

@EmanuilRusev Tôi sẽ quan tâm nếu bạn có thể cung cấp một số số liệu thống kê vì tôi sẽ thêm vào câu trả lời.
rybo111

1
Hãy cẩn thận với điều này. Mã dưới đây xuất ra bool (sai). $ foo = 'cuốn sách'; $ bar = 'cuốn sách'; $ bar = đế ($ bar, 1); $ foo [0] = ''; var_dump ($ foo === $ bar);
thinkrepo

8

Câu trả lời được chấp nhận:

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

hoạt động nhưng sẽ loại bỏ nhiều :khi có nhiều hơn một lúc bắt đầu.

$str = substr($str, 1);

sẽ loại bỏ bất kỳ nhân vật nào từ đầu.

Tuy nhiên,

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

hoạt động hoàn hảo.


6

bạn có thể sử dụng hàm sbstr ()

$amount = 1;   //where $amount the the amount of string you want to delete starting  from index 0
$str = substr($str, $amount);

2

Trims xuất hiện của mỗi từ trong một mảng từ đầu và cuối của một chuỗi + khoảng trắng và tùy chọn thêm các ký tự đơn theo trang trí thông thường ()

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

Mã này hoạt động tốt cho tôi.

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

Có lẽ, đóng góp với câu trả lời quá.


1
cái này không hoạt động với chuỗi ký tự đơn: như "a"
anru

Bạn đúng =) Vì vậy, hãy tin rằng một giải pháp khả thi sẽ là kiểm tra trước khi nó chỉ chứa một ký tự. Ví dụ: $ str = strlen ($ str)> 1? chất nền ($ str, - (strlen ($ str) -1)): $ str; Hoặc $ str = strlen ($ str)> 1? chất nền ($ str, - (strlen ($ str) -1)): ''; bởi vì ý tưởng là loại bỏ nhân vật cuối cùng, nếu bạn chỉ có một ...: P
Claudionor Oliveira

1

sử dụng hàm mb_substr

    mb_substr("我abc", 1);

Hữu ích nếu nhân vật là một biểu tượng tiền tệ.
Raymie
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.