理解条纹偏移?

时间:2012-11-13 07:45:54

标签: php stripos

假设我有一个小数组():

    $array = array(
        'Pantin',
        'Paris',
        'Paris',
        'Puhahaa',
        'Ptdr',
        'Roumanie',
        'Rlolo'
    );

我想做什么? 只需获得以'r'字母开头的所有单词

$dataLen = sizeof($array);
$results = array();

for ($i = 0; $i < $dataLen && count($array) < 10; $i++) {
    if (stripos($array[$i], 'r', 0)) { // 

        array_push($results, $array[$i]); 
    }
}

print_r($results); // Output : Array ( [0] => Paris [1] => Paris [2] => Ptdr )

我无法理解..我把0作为偏移,但它给了我以P字母开头并且“包含”R字母的单词。

2 个答案:

答案 0 :(得分:5)

零是默认值,所以这些是等价的;

stripos($array[$i], 'r', 0)
stripos($array[$i], 'r') // Same

也就是说,他们从第0位开始,尝试找到字母rR。如果它不在位置0,则检查第二个字母,然后是第三个字母等。

Stripos返回找到的字母的位置。对于 Paris 返回2,对于 Rlolo ,它返回0.如果未找到,则返回false。

默认情况下,0和false都被解释为false。因此,如果第一个字母是R,则stripos返回0并且不执行if语句。要解决此问题,请使用以下代码:

if (stripos($array[$i], 'r') !== false) { ... }

如果您只想检查第一个字母而不是后续字母,您可以执行以下操作:

$word = $array[$i];
$firstLetter = $word[0];
if ($firstLetter == 'r' || $firstLetter == 'R') { ... }

答案 1 :(得分:1)

另一种方法是使用带回调的array_filter。

$results = array_filter($array, function($var) {
    return strtolower($var[0]) == 'r';
});

(当然你也可以使用return stripos($var, 'r') === 0;