1

比較演算子を適用して配列をループしたい。

したがって、このコードは次のとおりです。

$arr = array(1,2,3,4,5,6,7,8,9); 

foreach($arr as $key) 
{ 
    echo $key;
}

「123456789」となりechoます。5 より大きい、または 5 より小さい数値のみをリストできるコードが必要です (したがって、6789 または 1234 が出力されます)。

注:これを行う方法があり、比較的簡単であるとほぼ確信していますが、それを行う方法を見つけることができず、stackoverflowでこれを尋ねることに疑問の余地はないようです. 私は見ましたが、私のタイトルが示すように、グーグルのためにこれを簡潔に述べる方法がわかりません. ありがとうございました。

注: 外部条件チェックの使用を検討していましたが、これ専用の php 関数があれば、より効率的であると推測しました。

更新: array_filter が提案されたので、次のベンチマークを実行して、ここで従来のアプローチと組み込みのアプローチのどちらが優れているかをテストしました。

$arr=array(); 
for($x=1;$x<10001;$x++){
    $arr[]=$x;
}

$a1 = microtime();
foreach($arr as $key) {
    if ($key > 5000) {
        echo $key;
    }
}
$a2 = microtime();
$a3 = microtime();
$greater = array_filter($arr, function ($key) {
    return $key > 5000;
});

foreach($greater as $key) {
    echo $key;
}
$a4 = microtime();

$firsttest=$a2-$a1;
$secondtest=$a4-$a3;
echo '<br>'.$firsttest.'<br>'.$secondtest;

つまり、foreach を使用してから if 条件を使用する方が、array_filter を使用してから foreach ループを使用するよりもはるかに効率的です。

4

2 に答える 2

3

エコーの周りに条件を追加するだけです。

$arr = array(1,2,3,4,5,6,7,8,9); 

foreach($arr as $key) {
    if ($key > 5) {
        echo $key;
    }
}

または、三項演算子を使用して、5 を超えない場合は空の文字列をエコーし​​ます。

$arr = array(1,2,3,4,5,6,7,8,9); 

foreach($arr as $key) {
    echo $key > 5 ? $key : '';
}

そして、array_filterすべてを抽出values > 5して独自の配列に入れることができるものがあります。これらの値を後で保持する必要がある場合に便利です。

$arr = array(1,2,3,4,5,6,7,8,9);
$greater = array_filter($arr, function($key) {
    return $key > 5;
});

foreach($greater as $key) {
    echo $key;
}
于 2013-10-12T03:55:23.963 に答える
1
$arr = array(1,2,3,4,5,6,7,8,9); 

foreach($arr as $key) 
{ 
  if($key > 5)
     echo $key;
}
于 2013-10-12T03:54:41.703 に答える