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から始まるインデックスが付けられ、この関数の2番目のパラメーターはカットスタートを受け取ります。だから、それを1にすると、最初のcharはなくなります。


35
ユニコードに注意してください。任意の文字列(「Ål<-danish for eel」など)を扱う場合は、mb_substrを使用してエンコードを指定する必要があります。
Thomas Jensen

これは正しい実装ではなく、単一の文字列「a」では機能しません。単一の文字列を試すと、substrはブール値を返します
anru

2
@anruマニュアルでは、文字列の長さが開始パラメータと等しい場合、空の文字列が返されます。バージョン7より前falseは返されました。したがって、それが目的の動作でない場合は、それらが等しいかどうかを確認する必要があります。
rybo111 2016

95

substrを使用:

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

正解です。共有してくれてありがとう!ただし、コード内のapplepieに関するコメントを理解しているとは思いません。オブジェクト指向
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 2014年

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 2015年

3
これは動作しません。「削除された」位置はnullバイトに置き換えられるため、「hello」の代わりに「\ 0hello」を取得します。
Josef Kufner、2015

1
$ str [0] = ""の場合、「警告:空の文字列を文字列オフセットに割り当てることはできません」というメッセージが表示されます。
Franciscoルス


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 2014

@EmanuilRusevどうやって?タイプするのが速い、または実行速度が速いという意味では、気になるところです。
rybo111 2014年

私はそれがより速く走ることを意味します。
Emanuil Rusev 2014

@EmanuilRusev私が回答に追加するので、いくつかの統計を提供できるかどうか興味があります。
rybo111 2014年

1
これには注意が必要です。以下のコードはbool(false)を出力します。$ foo = 'book'; $ 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

配列内のすべての単語の出現を、文字列+空白文字の先頭と末尾から切り取り、オプションで通常のtrim()のように余分な単一文字を切り取ります

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

そうです=)したがって、可能な解決策は、1つの文字のみが含まれる前にテストすることだと考えてください。例:$ str = strlen($ str)> 1?substr($ str、-(strlen($ str)-1)):$ str; または$ str = strlen($ str)> 1?substr($ str、-(strlen($ str)-1)): ''; アイデアが最後の文字を削除することなので、1つしかない場合は...:P
Claudionor Oliveira

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.