11

特定の基準が満たされたときに終了しても構わないと思っているarray_reduce関数があります。

$result = array_reduce($input, function($carrier, $item) {
  // do the $carrier stuff
  if (/* god was one of us */) {
    break; //some break analogue
  }
  return $carrier;
});

どうすればこれを達成できますか? または、代わりに foreach を使用する必要がありますか?

4

5 に答える 5

1

foreach代わりにループを使用することをお勧めします。使用しない理由は次のarray_reduceとおりです。

健全な理由:

  1. 静的に型チェックされません。そのため、入力またはコールバック引数に型エラーがある場合、コード インスペクションは型エラーを表示しません。
  2. を返すmixedため、結果を誤用してもインスペクションはエラーを表示しません。また、適切に使用すると誤検出を示す可能性があります。
  3. 壊すことはできません。

意見のある理由:

  1. 目には難しいです。$resultループ内で a とそれに追加する (または何をするにしても) ことは、何かが ed であり、次の呼び出しでアキュムレータとして渡されることを理解するよりもはるかに読みやすいですreturn$carry
  2. 関数を適切に抽出するのが面倒です。1 つの操作をコールバックに抽出すると、配列操作全体を関数に抽出するのに十分な短いコードが見つかる場合があります。
  3. 条件を使用してブレークすると、いつかそのコールバック関数に他の引数が必要になる可能性が高くなります。コールバック シグネチャが修正されると、useキーワードを使用して引数を渡す必要があります。これは、コールバック以外の場合よりもはるかに読みにくいものです。
于 2021-03-19T18:03:01.623 に答える