5

配列の1つの要素で条件が満たされた場合、コールバックの実行を中断できますか?

元 。

$a = array(1,2,3,4,5);
foreach($a as $val){

    if ($val == 3){
      break;
    }

}

コールバックと書くと以下のようになります

$result = array_filter($a, function(){
      if ($val == 3){
          return true;
        }
});

コールバックでは、条件が3で満たされているにもかかわらず、すべての配列要素を通過します。残りの2つの要素4、5もコールバックを通過します。

コールバックにそのような関数が必要です。これにより、コールバックが1つの目的の条件に一致しなくなり、残りの要素の実行が停止します。

可能ですか?

4

2 に答える 2

5

静的変数を使用してこれを行うことができます。静的変数はコールバック関数内のローカルスコープですが、呼び出し間でその値を保持します。

値に関してはグローバル変数のように動作しますが、ローカルスコープがあります。

$callback = function($val)
{
    static $filter = false;

    if ($val == 3) {
        $filter = true;
    }

    return $filter;        
};

このコールバックは。falseまで戻ります$val == 3。その後、戻りtrueます。

于 2012-06-05T06:32:11.553 に答える
4

array_filterでこれを達成できるとは思いませんが、次のようなことができます。

$a = array(1,2,3,4,5);
try {
    array_walk($a, function($value, $key) use(&$a) {
        if ($value == 3){
            throw new Exception("condition match");
        }
        unset($a[$key]);
    });
}
catch(Exception $e) { }
var_dump($a);
于 2012-06-05T06:54:31.263 に答える