Bagaimana cara menghapus karakter pertama dari string di PHP?


Jawaban:


330

Untuk menghapus setiap :dari awal string, Anda dapat menggunakan ltrim :

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

109
Perhatikan bahwa lrtim akan menghapus semua :::::. Terkadang perilaku ini tidak diinginkan.
CoR

5
perhatikan bahwa ini hanya ditujukan untuk karakter tunggal. ltrim akan memangkas semua karakter dalam string yang disediakan: ltrim('prefixprefix_postfix', 'prefix')hasil dalam'_postfix';
Cody Django

556

The substr()Fungsi mungkin akan membantu Anda di sini:

 $str = substr($str, 1);

String diindeks mulai dari 0, dan parameter fungsi ini mengambil cutstart. Jadi buat itu 1, dan char pertama hilang.


35
Waspadai unicode. Jika Anda berurusan dengan string arbitrer (mis. "Ål <- danish for eel"), Anda harus menggunakan mb_substr dan tentukan pengkodeannya.
Thomas Jensen

ini bukan implementasi yang benar, ini tidak bekerja dengan string karakter tunggal "a". jika Anda mencoba string karakter tunggal, substr mengembalikan nilai boolean
anru

2
@ anru Manual menyatakan jika panjang string sama dengan parameter mulai, string kosong akan dikembalikan. Sebelum versi 7, falsedikembalikan. Jadi, Anda perlu memeriksa apakah mereka sama jika itu bukan perilaku yang Anda inginkan.
rybo111

95

Gunakan substr :

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

Jawaban yang sangat bagus! Terima kasih telah berbagi! Namun, saya tidak yakin saya memahami komentar dalam kode Anda tentang applepie. oO
HoldOffHunger

64

Waktu Exec untuk 3 jawaban:

Hapus huruf pertama dengan mengganti kasing

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

Waktu pelaksanaan untuk 1.000.000 tes: 0.39602184295654dtk


Hapus huruf pertama dengan substr ()

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

Waktu pelaksanaan untuk 1.000.000 tes: 5.153294801712dtk


Hapus huruf pertama dengan ltrim ()

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

Waktu pelaksanaan untuk 1.000.000 tes: 5.2393000125885dtk


Hapus huruf pertama dengan preg_replace ()

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

Waktu pelaksanaan untuk 1.000.000 tes: 6.8543920516968dtk


Terima kasih. Lihat pembaruan saya. Itu menyebabkan masalah bagi saya ketika menggunakan string yang diperbarui dalam permintaan SQL.
rybo111

6
Saya hanya mencoba $str[0] = '';solusinya dan tidak berhasil. namun itu baik jika Anda kemudian berencana menggunakan variabel misalnya untuk membandingkan >atau <itu tidak akan berhasil. Itu masih dianggap `` sebagai + `misalnya $str = 'hello'; $str[0] = ''; var_dump($str); // string(5) 'ello'
Ian

@Ian: Saya menemukan masalah yang sama saat mengambil catatan dari API menggunakan kata kunci, mencoba var_dump($keyword)yang menunjukkan panjang karakter sebelumnya .. lalu saya mencoba memotong kata kunci dan kemudian bekerja dengan baik var_dump(trim($keyword)).. Semoga ini bisa membantu seseorang .. :)
Syed Qarib

3
Ini tidak bekerja. Posisi "dihapus" diganti dengan byte nol, sehingga Anda mendapatkan "\ 0hello" alih-alih "halo".
Josef Kufner

1
Saya mendapatkan "Peringatan: Tidak dapat menetapkan string kosong ke offset tali" untuk $ str [0] = "";
Francisco Luz

25

Ini kodenya

$str = substr($str, 1); 

echo $str;

Keluaran:

this is a applepie :)

11

Untuk menghapus Karakter pertama dari string di PHP,

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

echo $new_string;
Generates: "bcdef"

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

Lihat contoh manual PHP 3

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

catatan:

unset($str[0]) 

tidak akan berfungsi karena Anda tidak dapat membatalkan bagian dari string: -

Fatal error: Cannot unset string offsets

9

Memperbarui

Setelah tes lebih lanjut, saya tidak merekomendasikan menggunakan ini lagi. Itu menyebabkan masalah bagi saya ketika menggunakan string yang diperbarui dalam permintaan MySQL, dan mengubah untuk substrmemperbaiki masalah. Saya berpikir untuk menghapus jawaban ini, tetapi komentar menyarankan itu entah bagaimana lebih cepat sehingga seseorang mungkin menggunakannya untuk itu. Anda mungkin menemukan pemotongan string yang diperbarui menyelesaikan masalah panjang string.


Terkadang Anda tidak membutuhkan fungsi:

$str[0] = '';

Sebagai contoh:

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

Metode ini memodifikasi string yang ada daripada membuat yang lain.


Ini tampaknya lebih cepat juga.
Emanuil Rusev

@ EnmanuilRusev bagaimana bisa begitu? Hanya ingin tahu apakah yang Anda maksud lebih cepat untuk mengetik atau berjalan lebih cepat.
rybo111

Maksud saya itu berjalan lebih cepat.
Emanuil Rusev

@ EmanuilRusev Saya akan tertarik jika Anda bisa memberikan beberapa statistik karena saya akan menambah jawabannya.
rybo111

1
Harus hati-hati dengan ini. Kode di bawah ini menghasilkan bool (false). $ foo = 'book'; $ bar = 'buku'; $ bar = substr ($ bar, 1); $ foo [0] = ''; var_dump ($ foo === $ bar);
thoughtrepo

8

Jawaban yang diterima:

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

berfungsi tetapi akan menghapus banyak :ketika ada lebih dari satu di awal.

$str = substr($str, 1);

akan menghapus karakter apa pun dari awal.

Namun,

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

bekerja dengan sempurna.


6

Anda dapat menggunakan fungsi sbstr ()

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

2

Memangkas kemunculan setiap kata dalam array dari awal dan akhir string + spasi putih dan opsional karakter tunggal tambahan sesuai trim 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

Kode ini berfungsi dengan baik untuk saya.

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

Mungkin, berkontribusi juga dengan jawaban.


1
yang ini tidak bekerja dengan string karakter tunggal: seperti "a"
anru

Anda benar =) Jadi, percayalah bahwa solusi yang mungkin adalah menguji sebelum hanya berisi satu karakter. Sebagai contoh: $ str = strlen ($ str)> 1? substr ($ str, - (strlen ($ str) -1)): $ str; Atau $ str = strlen ($ str)> 1? substr ($ str, - (strlen ($ str) -1)): ''; karena idenya adalah untuk menghapus karakter terakhir, jika Anda hanya punya satu ...: P
Claudionor Oliveira

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.