【问题标题】:Matching a needle at beginning of a haystack line with stripos().用 stripos() 在干草堆线的开头匹配一根针。
【发布时间】:2013-07-22 14:49:16
【问题描述】:

在以下代码中:

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

谢谢。

【问题讨论】:

    标签: php


    【解决方案1】:

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

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

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

    说明

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

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

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

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

    【讨论】:

    • 糟糕 :) 抱歉,我正在编辑答案。添加一些解释,只是为了完整。啊,好吧,很高兴它一开始就有所帮助;)
    猜你喜欢
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多