假设我有一个小数组():
$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字母的单词。
答案 0 :(得分:5)
零是默认值,所以这些是等价的;
stripos($array[$i], 'r', 0)
stripos($array[$i], 'r') // Same
也就是说,他们从第0位开始,尝试找到字母r
或R
。如果它不在位置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;
)