PHP dizenin ilk karakteri nasıl kaldırılır?


Yanıtlar:


330

:Bir dizenin başlangıcından her birini kaldırmak için ltrim komutunu kullanabilirsiniz :

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

109
Lrtim'in hepsini kaldıracağını unutmayın :::::. Bazen bu istenen davranış değildir.
CoR

5
bunun yalnızca tek karakterler için tasarlandığını unutmayın. ltrim sağlanan dizedeki tüm karakterleri düzeltir: ltrim('prefixprefix_postfix', 'prefix')sonuçları'_postfix';
Cody Django

556

substr()Fonksiyon muhtemelen size burada yardımcı olacaktır:

 $str = substr($str, 1);

Dizeler 0'dan başlayarak dizine eklenir ve bu işlev ikinci parametresi cutstart'ı alır. Bu yüzden 1 yapın ve ilk karakter gitti.


35
Unicode'un farkında olun. Rasgele bir dizeyle uğraşıyorsanız (örn. "Ål <- yılan balığı için danish"), mb_substr kullanmalı ve kodlamayı belirtmelisiniz.
Thomas Jensen

bu doğru bir uygulama değildir, "a" tek karakter dizesiyle çalışmaz. tek karakter dizesini denerseniz, substr bir boolean değeri döndürür
anru

2
@anru Kılavuz, dize uzunluğunun start parametresine eşit olup olmadığını belirtir, boş bir dize döndürülür. Sürüm 7'den önce falseiade edildi. Dolayısıyla, istediğiniz davranış bu değilse eşit olup olmadıklarını kontrol etmeniz gerekir.
rybo111

95

Substr kullanın :

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

Mükemmel cevap! Paylaşım için teşekkürler! Yine de kodunuzdaki applepie hakkındaki yorumu anladığımdan emin değilim. oO
HoldOffHunger

64

3 cevap için yürütme süresi:

Davayı değiştirerek ilk harfi kaldırın

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

1.000.000 test için yürütme süresi: 0.39602184295654sn


Substr () ile ilk harfi kaldırın

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

1.000.000 test için yürütme süresi: 5.153294801712sn


Ltrim () ile ilk harfi kaldırın

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

1.000.000 test için yürütme süresi: 5.2393000125885sn


Preg_replace () ile ilk harfi kaldırın

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

1.000.000 test için yürütme süresi: 6.8543920516968sn


Teşekkürler. Yine de güncellememe bakın. Bir SQL sorgusunda güncellenmiş dizeyi kullanırken benim için bir soruna neden oldu.
rybo111

6
Sadece $str[0] = '';çözümü denedim ve işe yaramadı . ancak, örneğin karşılaştırmak için değişkeni kullanmayı planlıyorsanız yapar >veya <işe yaramaz. Hala `` + '' olarak sayılıyor$str = 'hello'; $str[0] = ''; var_dump($str); // string(5) 'ello'
Ian

@Ian: Ben bir önceki anahtar var_dump($keyword)uzunluğu gösteren bir anahtar kelime kullanarak bir API kayıtları getirilirken aynı sorunla karşılaştım .. sonra anahtar kelimeyi kırpmayı denedim ve sonra iyi çalıştı var_dump(trim($keyword)).. Umarım bu birine yardımcı olur .. :)
Syed Qarib

3
Bu çalışmıyor. "Kaldırıldı" konumu null bayt ile değiştirilir, böylece "merhaba" yerine "\ 0hello" alırsınız.
Josef Kufner

1
"Uyarı: $ str [0] =" "için bir dize ofsetine boş bir dize atayamazsınız";
Francisco Luz

25

İşte kod

$str = substr($str, 1); 

echo $str;

Çıktı:

this is a applepie :)

11

PHP'de dizenin ilk karakterini kaldırmak için,

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

echo $new_string;
Generates: "bcdef"

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

PHP el kitabı örneğine bakın 3

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

Not:

unset($str[0]) 

bir dizenin bir kısmını kaldıramayacağınız için çalışmaz : -

Fatal error: Cannot unset string offsets

9

Güncelleme

Sonraki testlerden sonra, artık kullanılmasını önermiyorum. MySQL sorgusunda güncellenmiş dizeyi kullanırken ve sorunu düzeltmek için değiştirirken benim için bir soruna neden oldu substr. Bu cevabı silmeyi düşündüm, ancak yorumlar bir şekilde daha hızlı olduğunu gösteriyor, bu yüzden birisi bunun için bir faydası olabilir. Güncellenen dizeyi kırpmanın dize uzunluğu sorunlarını çözdüğünü görebilirsiniz.


Bazen bir işleve ihtiyaç duymazsınız:

$str[0] = '';

Örneğin:

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

Bu yöntem, başka bir tane oluşturmak yerine mevcut dizeyi değiştirir.


Bu da daha hızlı görünüyor.
Emanuil Rusev

@EmanuilRusev nasıl yani? Yazmanın daha hızlı mı yoksa daha hızlı mı çalıştığını mı merak ediyorsunuz?
rybo111

Yani daha çabuk çalışıyor.
Emanuil Rusev

@EmanuilRusev Cevaba ekleyeceğim gibi bazı istatistikler sağlayabilirseniz ilgilenirim.
rybo111

1
Buna dikkat etmelisin. Aşağıdaki kod bool (false) çıktılar. $ foo = 'kitap'; $ bar = 'kitap'; $ bar = substr ($ bar, 1); $ foo [0] = ''; var_dump ($ foo === $ bar);
thoughtrepo

8

Kabul edilen cevap:

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

çalışır ancak :başlangıçta birden fazla olduğunda birden çok öğeyi kaldıracaktır .

$str = substr($str, 1);

herhangi bir karakteri başlangıçtan kaldırır.

Ancak,

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

Mükemmel çalışıyor.


6

sbstr () işlevini kullanabilirsiniz

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

2

Bir dizideki her sözcüğün oluşumunu, bir dize + boşluk ve isteğe bağlı olarak normal kırpma () uyarınca ekstra tek karakterlerin başından ve sonundan düzeltir

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

Kod benim için iyi çalışıyor.

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

Belki de cevaplarla katkıda bulunun.


1
bu tek karakter dize ile çalışmıyor: "a" gibi
anru

Haklısın =) Yani, olası bir çözümün sadece bir karakter içermeden önce test etmek olduğuna inan. Örneğin: $ str = strlen ($ str)> 1? substr ($ str, - (strlen ($ str) -1)): $ str; Veya $ str = strlen ($ str)> 1? substr ($ str, - (strlen ($ str) -1)): ''; çünkü fikir son karakteri kaldırmak, eğer sadece bir tane varsa ...: P
Claudionor Oliveira

1

mb_substr işlevini kullan

    mb_substr("我abc", 1);

Karakter bir para birimi sembolü ise kullanışlıdır.
Raymie
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.