web-dev-qa-db-ja.com

pHPで文字列の最後の文字を取得する方法?

文字列の最後の文字を取得する必要があります。入力文字列として "testers"があり、結果を "s"にしたいとします。どうすればPHPでそれができますか?

423
streetparade
substr("testers", -1); // returns "s"
872
Rich Adams
substr($string, -1) 
69
knittl

または 直接文字列アクセス

$string[strlen($string)-1];

これはマルチバイト文字列では機能しないことに注意してください。マルチバイト文字列を扱う必要がある場合は、 mb_*文字列関数ファミリの使用を検討してください。

PHP 7.1.0以降、負の数値インデックスもサポートされています。例えば$string[-1];だけです。

64
Gordon

今後のPHP 7.1では、これを実行できるようになります( 負の文字列オフセットに対応するrfc )。

<?php
$silly = 'Mary had a little lamb';
echo $silly[-20];
echo $silly{-6};
echo $silly[-3];
echo $silly[-15];
echo $silly[-13];
echo $silly[-1];
echo $silly[-4];
echo $silly{-10};
echo $silly[-4];
echo $silly[-8];
echo $silly{3};
die();

私はあなたに出力を推測させます。

また、これらを xenoniteの performanceコードに追加しました。

substr()の時間は7.0334868431091秒です

アレイアクセスには2.3111131191254秒かかりました

直接文字列アクセスには1.7971360683441秒かかりました

29
RyanNerd

私はコメントを残すことはできませんが、FastTrackの答えに関しては、行末は1文字だけかもしれないことも覚えておいてください。私はお勧めします

substr(trim($string), -1)

編集: 以下の私のコードは誰かによって編集されたので、私が示したことはしません。元のコードを復元し、文章をより明確にするように変更しました。

trim(またはrtrim)は all 空白を削除するので、スペース、タブ、またはその他の空白を確認する必要がある場合は、最初にさまざまな行末を手動で置き換えます。

$order = array("\r\n", "\n", "\r");
$string = str_replace($order, '', $string);
$lastchar = substr($string, -1);
16
Slashback

それはsubstr()よりもパフォーマンスが高いので、私はGordonのソリューションに行くことをお勧めします。

<?php 

$string = 'abcdef';
$repetitions = 10000000;

echo "\n\n";
echo "----------------------------------\n";
echo $repetitions . " repetitions...\n";
echo "----------------------------------\n";
echo "\n\n";

$start = microtime(true);
for($i=0; $i<$repetitions; $i++)
    $x = substr($string, -1);

echo "substr() took " . (microtime(true) - $start) . "seconds\n";

$start = microtime(true);
for($i=0; $i<$repetitions; $i++)
    $x = $string[strlen($string)-1];

echo "array access took " . (microtime(true) - $start) . "seconds\n";

die();

のようなものを出力する

 ---------------------------------- 
 10000000 repetitions...
 ----------------------------------

 substr() took 2.0285921096802seconds 
 array access took 1.7474739551544seconds
5
Xenonite

PHP 7.1.0以降、負の文字列オフセットもサポートされています。したがって、時間に遅れないようにすれば、文字列の最後の文字に次のようにアクセスできます。

$str[-1]

デモ

4
nektobit

fgets()関数を使用してテキストファイルから行として読み込まれた文字列がある場合は、CRLF(Carriage Return Line Feed)の一部ではなく実際の文字を取得するためにsubstr($string, -3, 1)を使用する必要があります。

質問をした人がこれを必要としているとは思いませんが、私にとっては、テキストファイルの文字列から最後の文字を取得するのに問題があり、他の人も同様の問題に遭遇するでしょう。

4
FastTrack

C sharpやPHPなど、さまざまな言語の文字列も文字の配列と見なされます。

理論的には配列の演算はあなたができる文字列の演算よりも速いはずです。

$foo = "bar";


$lastChar = strlen($foo) -1;
echo $foo[$lastChar];

$firstChar = 0;
echo $foo[$firstChar];

しかし、標準配列関数は

count();

文字列に対しては機能しません。

1
Petar Atanasov

substr()mb_substr() のように、phpを使って最後の文字を見つけることができます。

UTF-8などのマルチバイト文字エンコーディングを使用している場合は、 substr の代わりに mb_substr を使用してください。

ここで私はあなたに両方の例を見せることができます:

<?php
    echo substr("testers", -1);
    echo mb_substr("testers", -1);
?>

ライブデモ

1
Faisal