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

rつまり、位置 0 から開始して、文字またはを見つけようとしますR。0 の位置にない場合は、2 番目の文字をチェックし、次に 3 番目の文字をチェックします。

Stripos は見つかった文字の位置を返します。Parisの場合は 2 を返し、Rloloの場合は 0 を返します。見つからない場合は false を返します。

デフォルトでは、0 と false は両方とも false として解釈されます。したがって、最初の文字がの場合Rstripos0 が返され、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 に答える