匹配干草堆线开头的针与stripos()。

时间:2013-07-22 14:49:17

标签: php

在以下代码中:

// array source elements are formatted like...
// string=string 
// string string=string

foreach ($matches[0] as $value){ 

    $titleText = array(); // Store results into an array.

    foreach ($lines as $line) { // Read the lines in the dictionary file 

        if ( stripos($line, "<beginning of a line>" . $value . "=") || stripos($line, " " . $value . "=") !== false){ // Found string in array.
            list($field1, $field2) = explode('=', $line);
            array_push($titleText, "$field1 > $field2"); // Store all finds in array before outputting.
        } 

    }

echo "Found " . count($titleText) . " instances of " . $value . "\n";

print_r($titleText);

}

我正试图让stripos()识别一行的开头,这里......

if ( stripos($line, "<beginning of a line>" . $value . "=") || stripos($line, " " . $value . "=") !== false)

......但无法弄清楚这是否可行。是否有一种方法可以使用stripos,或者还有另一种功能可以更好地完成这项工作。我最初选择stripos是因为数组非常大而且stripos意味着最快/最少的资源。

感谢。

1 个答案:

答案 0 :(得分:2)

stripos返回找到匹配开头的位置(整数),如果未找到匹配则返回false。 只需检查是否找到匹配的结果,从位置0(字符串的开头)开始。

if ( stripos($line, $value . "=") === 0 || stripos($line, " " . $value . "=") !== false)

其中stripos($line, $value . "=")的结果必须为0且具有相同类型的0,整数。这就是===的作用。为什么不使用==

解释

如果haystack不包含针,则函数返回false。转换为整数时,false等于0。换句话说,'不匹配'会给我们与'在字符串开头匹配'相同的结果。我们不希望这样。

===检查是否相等,包括类型检查。

  • 0 == false:价值相同。 TRUE!
  • 0 === false:相同的值, TR ...但是嘿,不同的类型:FALSE!

结论:使用===运算符代替==运算符非常重要。