目录搜索
文字
分享

stripos

(PHP 5)

stripos查找字符串首次出现的位置(不区分大小写)

说明

int stripos ( string $haystack , string $needle [, int $offset = 0 ] )

返回在 字符串 haystackneedle 首次出现的数字位置。

strpos() 不同, stripos() 不区分大小写。

参数

haystack

在该字符串中查找。

needle

注意 needle 可以是一个单字符或者多字符的字符串。

如果 needle 不是一个字符串,那么它将被转换为整型并被视为字符顺序值。

offset

可选的 offset 参数允许你指定从 haystack 中的哪个字符开始查找。返回的位置数字值仍然相对于 haystack 的起始位置。

返回值

返回 needle 存在于 haystack 字符串开始的位置(独立于偏移量)。同时注意字符串位置起始于 0,而不是 1。

如果未发现 needle 将返回 FALSE

Warning

此函数可能返回布尔值 FALSE ,但也可能返回等同于 FALSE 的非布尔值。请阅读 布尔类型章节以获取更多信息。应使用 === 运算符来测试此函数的返回值。

范例

Example #1 stripos() 范例

<?php
$findme    
'a' ;
$mystring1  'xyz' ;
$mystring2  'ABC' ;

$pos1  stripos ( $mystring1 $findme );
$pos2  stripos ( $mystring2 $findme );

// 'a' 当然不在 'xyz' 中
if ( $pos1  ===  false ) {
    echo 
"The string ' $findme ' was not found in the string ' $mystring1 '" ;
}

// 注意这里使用的是 ===。简单的 == 不能像我们期望的那样工作,
// 因为 'a' 的位置是 0(第一个字符)。
if ( $pos2  !==  false ) {
    echo 
"We found ' $findme ' in ' $mystring2 ' at position  $pos2 " ;
}
?>

注释

Note: 此函数可安全用于二进制对象。

参见

  • mb_stripos() - 大小写不敏感地查找字符串在另一个字符串中首次出现的位置
  • strpos() - 查找字符串首次出现的位置
  • strrpos() - 计算指定字符串在目标字符串中最后一次出现的位置
  • strripos() - 计算指定字符串在目标字符串中最后一次出现的位置(不区分大小写)
  • stristr() - strstr 函数的忽略大小写版本
  • substr() - 返回字符串的子串
  • str_ireplace() - str_replace 的忽略大小写版本

用户评论:

[#1] Ian Macdonald [2015-08-29 10:25:57]

Regarding the === note, it might be worth clarifying that the correct tests for a binary found/not found condition are  !==false to detect found, and ===false to detect not found.

[#2] spam at kleppinger dot com [2015-03-04 14:08:11]

Regarding the function by spam at wikicms dot org

It is very bad practice to use the same function name as an existing php function but have a different output format.  Someone maintaining the code in the future is likely to be very confused by this.  It will also be hard to eradicate from a codebase because the naming is identical so each use of stripos() would have to be analyzed to see how it is expecting the output format (bool or number/bool).

Calling it string_found() or something like that would make a lot more sense for long-term use.

[#3] spam at wikicms dot org [2013-12-15 08:57:32]

If you like using ternary operator, I wrote simple example how to use stripos function.
Also, in my example I add "How to use namespaces" for wide knowledges for newbies.

<?php
namespace My;

//You can be free using core functions in your NameSpaces (My)
function stripos($haystack$needle) {
    
//To call core function (from global NS) you should add backslash only - \func
    
return (FALSE === \stripos($haystack$needle)) ? FALSE TRUE;
}

var_dump(stripos($haystack 'John knows English language.'$needle 'john')); //TRUE
var_dump(stripos($haystack 'Sara knows English language too.'$needle 'john')); //FALSE
?>

[#4] steve at opilo dot net [2013-07-01 16:38:03]

A handy function if you need to adjust layout based on whether or not a string contains descending letters:

<?php function containsDescenders($text) {
    
$descenders = array("g","j","p","q","y");
    foreach (
$descenders as $letter) {
        if (
stripos($text,$letter) !== false) {
            return 
true;
        }
    }
    return 
false;
?>

[#5] emperorshishire at gmail dot com [2009-02-24 19:31:52]

I found myself needing to find the first position of multiple needles in one haystack.  So I wrote this little function:

<?php
function multineedle_stripos($haystack$needles$offset=0) {
    foreach(
$needles as $needle) {
        
$found[$needle] = stripos($haystack$needle$offset);
    }
    return 
$found;
}

// It works as such:
$haystack "The quick brown fox jumps over the lazy dog.";
$needle = array("fox""dog"".""duck")
var_dump(multineedle_stripos($haystack$needle));

?>

[#6] grf at post dot cz [2007-03-20 04:57:59]

this would to work with any language, i hope.
tested on czech (eastern europe) lang.

<?php


function safeHighlight$needleArr$shearLft$shearRgt$subject$encoding 'utf-8')
{
    
    
// encoding
    
$e $encoding;
    
    
// oh, no needles
    
if( !is_array$needleArr))
        return 
$subject;
        
    
// empty keys throw-off, only unique, reindex
    
$nA array_values(
            
array_unique(
                
array_diff$needleArr, array(''))
            )
        );
    
    
// needle count
    
if( !($nC count$nA)))
        return 
$subject// nothing to hl
        
    // shear length
    
if( !(($rLL mb_strlen$rL $shearLft$e))
    + (
$rRL mb_strlen$rR $shearRgt$e))))
        return 
$subject// no shears
    
    // subject length
    
if( !($sL mb_strlen$s $subject$e)))
        return 
null// empty subject
        
    // subject in lowercase (we need to aviod
    // using mb_stripos due to PHP version)
    
$sW mb_strtolower$s$e);
    
    
// masking ~ 0=not changed, 1=changed
    
$m str_repeat'0'$sL);
    
    
// loop for each needle
    
for( $n=0$n<$nC$n++)
    {
        
        
// needle string loWercase
        
$nW mb_strtolower$nA$n], $e);
        
        
$o 0// offset
        
$nL mb_strlen$nW$e); // needle length

        // search needle
        
while( false !== ($p mb_strpos$sW$nW$o$e)))
        {
            
// oh hurrey, needle found on $p position
            
            // is founded needle already modified? (in full-length)
            
for( $q=$p$q<($p+$nL); $q++)
                if( 
$m$q])
                {
                    
// ai, caramba. already modified, jump over
                    
$o+= $nL;
                    
                    
// continue for while() loop - not for for() loop!
                    
continue 2;
                }
            
            
// explode subject and mask into three parts
            // partA|needle|partB
            
$sE[0] = mb_substr$s0$p$e);
            
$sE[1] = mb_substr$s$p$nL$e);
            
$sE[2] = mb_substr$s$p+$nL$sL-$p-$nL$e);
            
            
// mask
            // partA|partB (needle not needed)
            
$mE[0] = mb_substr$m0$p$e);
            
$mE[1] = mb_substr$m$p+$nL$sL-$p-$nL$e);
            
            
// apply shears
            
$sE[1] = $rL.$sE[1].$rR;
            
            
// update sunject length
            
$sL+= $rLL $rRL;
            
            
// update mask
            
$m $mE[0] . str_repeat'1'$rLL $nL $rRL) . $mE[1];
            
            
// implode into a subject
            
$s implode$sE);
            
            
// update lowercase subject
            
$sW mb_strtolower$s$e);
            
            
// increase offset
            
$o+= $rLL $nL $rRL;
            
            
// end of string reached
            
if( $o>=$sL)
                break;
            
        } 
// while()
        
    
// for( $n=0; $n<$nC; $n++)
    
    // oouu yeaaa, kick the subject out of the function
    
return $s;
    
// function safeHighlight()

?>

上一篇:stripcslashes下一篇:stripslashes