2012-11-13 52 views
0

比方说,我有一小阵():理解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的信。

+1

你问到“开始搜索在偏移0”,而不是“停止搜索后偏移0”。试试'in_array($ array [$ i] [0],array('R','r'))''。 – DCoder

+0

@DCoder是的,谢谢你,我在网上看到了这个!但为什么=== 0不是它应该是假?我为什么要把它放在函数之外?你能解释我这个,我会接受你的答案。 – Ydhem

回答

3

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

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') { ... } 
+2

或者简单的'stripos($ array [$ i],'r')=== 0' – Yoshi

+0

清晰简单!非常感谢你! – Ydhem

+0

@Yoshi:这可能比仅仅直接检查第一个符号要慢。并不显着,但仍然。 – DCoder

1

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

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

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

+0

谢谢你的选择。 – Ydhem