現在の位置: ホーム> 最新記事一覧> STRCHRを使用して、PHPの文字列内の最後の指定された文字の位置を見つける方法は?

STRCHRを使用して、PHPの文字列内の最後の指定された文字の位置を見つける方法は?

gitbox 2025-07-26

STRCHRを使用して、PHPの文字列内の最後の指定された文字の位置を見つける方法は?

PHPプログラミングでは、文字列の処理は最も一般的なタスクの1つです。特定のキャラクターの場所を文字列内に見つける必要がある場合がありますが、これは必ずしも左から右への単純な検索ではありません。通常のSTRCHR関数は、指定された文字が最初に表示される場所を見つけるのに役立ちますが、文字の最後の発生を直接見つけることはできません。この要件を達成するには、 STRCHRを使用して、文字列内の最後の指定された文字の位置を見つけるためにいくつかのトリックを使用する必要があります。

STRCHR関数の基本的な使用

まず、 STRCHR関数の基本的な使用法を簡単に確認しましょう。 strchrは、文字列で初めてキャラクターが表示される場所を見つけるPHPの文字列関数です。その構文は次のとおりです。

 <span><span><span class="hljs-title function_ invoke__">strchr</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$needle</span></span><span>): </span><span><span class="hljs-keyword">string</span></span><span>|</span><span><span class="hljs-literal">false</span></span><span>
</span></span>
  • $ haystackはターゲット文字列(つまり、検索している文字列)です。

  • $針は、私たちが探しているキャラクターまたはサブストリングです。

例えば:

 <span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"Hello, world!"</span></span><span>;
</span><span><span class="hljs-variable">$position</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strchr</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-string">'o'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$position</span></span><span>;  </span><span><span class="hljs-comment">// 出力 "o, world!"</span></span><span>
</span></span>

これにより、見つかったキャラクター(文字自体を含む)から文字列の端まですべてを返します。

最後の文字を見つけるためのヒント

Strchr自体は最後のキャラクターの位置を見つけることをサポートしていませんが、賢い方法でこれを行うことができます。具体的なアイデアは、 strrev関数を使用して文字列を反転させ、 strchrを使用してキャラクターの最初の発生位置を見つけ、最後にstrlenを介して元の文字列の位置に変換することです。

PHPでSTRCHRを使用する方法を示す例を示します。

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">strchr_last</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$haystack</span></span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>) {
    </span><span><span class="hljs-comment">// ターゲット文字列を反転します</span></span><span>
    </span><span><span class="hljs-variable">$reversed</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strrev</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>);
    
    </span><span><span class="hljs-comment">// 反転した文字列で最初の文字を見つけます</span></span><span>
    </span><span><span class="hljs-variable">$reversed_pos</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strchr</span></span><span>(</span><span><span class="hljs-variable">$reversed</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>);
    
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$reversed_pos</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">false</span></span><span>;  </span><span><span class="hljs-comment">// 指定された文字が見つからない場合,その後、返しますfalse</span></span><span>
    }
    
    </span><span><span class="hljs-comment">// 反転した文字列の位置を取得します</span></span><span>
    </span><span><span class="hljs-variable">$reversed_pos</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$reversed</span></span><span>) - </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$reversed_pos</span></span><span>);
    
    </span><span><span class="hljs-comment">// 元の文字列の位置を返します</span></span><span>
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$reversed_pos</span></span><span>;
}

</span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"Hello, world!"</span></span><span>;
</span><span><span class="hljs-variable">$position</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strchr_last</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-string">'o'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$position</span></span><span>;  </span><span><span class="hljs-comment">// 出力 7 (今すぐ "o" 元の文字列の最後の位置)</span></span><span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

コード解析

  1. STRREV関数:最初に、 strrev関数を使用して文字列を反転させます。これにより、文字列に表示される指定された文字を探すことにより、間接的に最後のキャラクターの位置を取得できます。

  2. STRCHR関数:反転した文字列では、 STRCHR関数を使用して、文字の最初の出現位置を見つけます。

  3. 位置変換:反転した文字列に文字位置が見つかるため、 Strlen($ verversed)Strlen($ verversed_pos)によって元の文字列の文字の位置を計算する必要があります。

利点と制限

この方法の利点は、 STRCHR自体が非常に効率的な機能であり、コードが簡潔であることです。最後の文字位置を見つけるには、コードの数行しかかかりません。唯一の制限は、このアプローチがひもの反転に依存しているため、非常に大きな文字列を扱うとパフォーマンスがわずかに低下する可能性があることです。さらに、文字が文字列に存在しない場合、 StrChrはFalseを返し、対応する処理も実行する必要があります。

要約します

STRCHR自体は、文字列内の最後の指定された文字の位置を見つけるために直接使用することはできませんが、文字列を反転させるトリックを使用してこの関数を間接的に実装できます。この方法はシンプルで効果的であり、毎日の開発でキャラクターの位置を見つける必要があるシナリオに適しています。 PHPの最後のキャラクターの場所を簡単に見つけたい場合は、この方法を試してください。