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:'
Haim Evgi
sumber
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.

mario
sumber
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 :)
Alex
sumber
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

Hayenn
sumber
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 :)
Tarun modi
sumber
11

Untuk menghapus Karakter pertama dari string di PHP,

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

echo $new_string;
Generates: "bcdef"
Chandan Sharma
sumber
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
Gammerz
sumber
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.

rybo111
sumber
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.

Dan Bray
sumber
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);
Adeojo Emmanuel IMM
sumber
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"
?>
Ben
sumber
1

Kode ini berfungsi dengan baik untuk saya.

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

Mungkin, berkontribusi juga dengan jawaban.

Claudionor Oliveira
sumber
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
1

gunakan fungsi mb_substr

    mb_substr("我abc", 1);
风声 猎猎
sumber
Berguna jika karakternya adalah simbol mata uang.
Raymie