在以下代码中:
// 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意味着最快/最少的资源。
感谢。
答案 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!结论:使用===
运算符代替==
运算符非常重要。