0

在以下代码中:

// 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 的本意是最快/最少的资源密集型。

谢谢。

4

1 回答 1

2

stripos返回找到匹配开始的位置(作为整数),或者false如果没有找到匹配。只需检查是否找到了匹配的结果,从位置 0(字符串的开头)开始。

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

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

解释

如果 haystack 中没有针,则函数返回false。转换为整数时,false等于0。换句话说,“不匹配”会给我们与“匹配字符串开头”相同的结果。我们不希望那样。

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

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

结论:使用运算符而不是使用===运算符很重要==

于 2013-07-22T14:51:08.640 回答