1

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

    $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 字母的单词。

4

2 回答 2

5

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

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

也就是说,它们从位置 0 开始并尝试找到字母ror 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') { ... }
于 2012-11-13T07:50:57.580 回答
1

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

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

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

于 2012-11-13T07:52:29.870 回答