PHP 8.0.26 Released!


(PHP 4, PHP 5, PHP 7, PHP 8)

stristr大文字小文字を区別しない strstr()


stristr(string $haystack, string $needle, bool $before_needle = false): string|false

haystack において needle が最初に見つかった位置を含めてそこから最後までを返します。





PHP 8.0.0 より前のバージョンでは、needle が文字列でない場合、 数値に変換され、文字の通常の値として扱われていました。 この振る舞いは PHP 7.3.0 以降では推奨されないので、 この機能を使用しないことを強く推奨します。 意図した動作に依存する場合、 needle を string に明示的にキャストするか、 明示的に chr() 関数を呼び出すべきでしょう。


true にすると、stristr() の戻り値は、haystack の中で最初に needle があらわれる箇所より前の部分となります (needle は含めません)。

needle および haystack は大文字小文字を区別せずに評価されます。


マッチした部分文字列を返します。needle が見つからない場合は false を返します。


バージョン 説明
8.2.0 ケースフォールディングは、setlocale() で設定されたロケールに依存しなくなりました。 ASCII のケースフォールディングのみが行われます。 ASCII でないバイト列は、バイト値として比較されます。
8.0.0 needle に数値を渡すことはサポートされなくなりました。
7.3.0 needle に数値を渡すことは非推奨になりました。

例1 stristr() の例

stristr($email'e'); // 出力は となります
echo stristr($email'e'true); // 出力は US となります

例2 文字列が見つかるかどうかをテストする

'Hello World!';
stristr($string'earth') === FALSE) {
'"earth" not found in string';
// 出力は "earth" not found in string となります

例3 文字列以外の needle の指定

stristr($string97); // 97 = 小文字の a
// 出力は APPLE となります


注意: この関数はバイナリデータに対応しています。


  • strstr() - 文字列が最初に現れる位置を見つける
  • strrchr() - 文字列中に文字が最後に現れる場所を取得する
  • stripos() - 大文字小文字を区別せずに文字列が最初に現れる位置を探す
  • strpbrk() - 文字列の中から任意の文字を探す
  • preg_match() - 正規表現によるマッチングを行う

add a note

User Contributed Notes 8 notes

20 years ago
There was a change in PHP 4.2.3 that can cause a warning message
to be generated when using stristr(), even though no message was
generated in older versions of PHP.

The following will generate a warning message in 4.0.6 and 4.2.3:
  stristr("haystack", "");
  $needle = "";  stristr("haystack", $needle);

This will _not_ generate an "Empty Delimiter" warning message in
4.0.6, but _will_ in 4.2.3:
  unset($needle); stristr("haystack", $needle);

Here's a URL that documents what was changed:
giz at gbdesign dot net
15 years ago
Just been caught out by stristr trying to converting the needle from an Int to an ASCII value.

Got round this by casting the value to a string.

if( !stristr( $file, (string) $myCustomer->getCustomerID()  ) ) {
// Permission denied
Techdeck at Techdeck dot org
20 years ago
An example for the stristr() function:

= "I like php";
if (
stristr("$a", "LikE PhP")) {
print (
"According to \$a, you like PHP.");

It will look in $a for "like php" (NOT case sensetive. though, strstr() is case-sensetive).

For the ones of you who uses linux.. It is similiar to the "grep" command.
Actually.. "grep -i".
notepad at codewalkers dot com
17 years ago

function stristr_reverse($haystack, $needle) {
$pos = stripos($haystack, $needle) + strlen($needle);
substr($haystack, 0, $pos);
$email = '';
stristr_reverse($email, 'er');
// outputs USER

8 years ago
I think there is a bug in php 5.3 in stristr with uppercase Ä containing other character

if you search only with täry it works, but as soon as the word is tärylä  it does not. TÄRYL works fine
tomas dot nesrovnal at yourspirit dot cz
13 years ago
Active item item in menu:

function aim($page) {
stristr($_SERVER['REQUEST_URI'], $page)) {
' class="active"';


<style type="text/css">
.active {color: red;}

print '<a href=""'. aim('hello-world') .'>HW</a>';
greg at no_ggmac_reply dot com
11 years ago
Beware the example given here:

if stristr($message,'viagra')
or stristr($message,'cialis')

stristr does not search for words, it finds matching substrings.  So, for example, the check for 'cialis' will trigger on 'specialist'
art at awilton dot dotcom
17 years ago
handy little bit of code I wrote to take arguments from the command line and parse them for use in my apps.


= implode(" ",$argv); //implode all the settings sent via clie
$e = explode("-",$i); // no lets explode it using our defined seperator '-'

       //now lets parse the array and return the parameter name and its setting
       // since the input is being sent by the user via the command line
       //we will use stristr since we don't care about case sensitivity and
       //will convert them as needed later.

while (list($index,$value) = each($e)){

//lets grap the parameter name first using a double reverse string
       // to get the begining of the string in the array then reverse it again
       // to set it back. we will also "trim" off the "=" sign

$param = rtrim(strrev(stristr(strrev($value),'=')),"=");

//now lets get what the parameter is set to.
       // again "trimming" off the = sign

$setting = ltrim(stristr($value,'='),"=");

// now do something with our results.
       // let's just echo them out so we can see that everything is working

echo "Array index is ".$index." and value is ".$value."\r\n";
"Parameter is ".$param." and is set to ".$setting."\r\n\r\n";



when run from the CLI this script returns the following.

[root@fedora4 ~]# php a.php -val1=one -val2=two -val3=three

Array index is 0 and value is a.php
Parameter is  and is set to

Array index is 1 and value is val1=one
Parameter is val1 and is set to one

Array index is 2 and value is val2=two
Parameter is val2 and is set to two

Array index is 3 and value is val3=three
Parameter is val3 and is set to three

[root@fedora4 ~]#
To Top