Menu
CoddyTech

'array_filter' とカスタム関数

CoddyのPHPジャーニー「論理とフロー」セクションの一部。レッスン 42/68。

コールバックなしの array_filter() は空の値を削除しますが、カスタムコールバック関数を指定したときにその真価が発揮されます。これにより、特定の基準に基づいて、どの要素を保持するかを正確に定義できます。

array_filter() でカスタム関数を使用するには、関数名を第2引数として渡します。コールバック関数は1つのパラメータ(現在の配列要素)を受け取り、要素を保持する場合は true を、除外する場合は false を返す必要があります。

<?php
function isEven($number) {
    return $number % 2 === 0;
}

$numbers = [1, 2, 3, 4, 5, 6, 7, 8];
$evenNumbers = array_filter($numbers, "isEven");
// 結果: [2, 4, 6, 8]
?>

この例では、isEven関数が剰余演算子を使用して各数値をテストします。true(偶数)を返す数値のみが、フィルタリングされた結果に含まれます。このアプローチにより、フィルタリングロジックを完全に制御できるようになり、array_filter()はデータ処理タスクにおいて非常に多機能なものになります。

challenge icon

チャレンジ

簡単

2つの入力を受け取ります。カンマ区切りの商品価格のリストと、最小価格のしきい値です。最初の入力は 15.99,45.00,8.50,120.00,22.75 のような形式の文字列としての価格で、2番目の入力は数値としての最小価格のしきい値(例:20)です。

両方の入力を読み込み、カンマ区切りの価格を数値の配列に変換し、価格がしきい値以上であるかどうかをチェックするカスタムコールバック関数を作成してください。そのカスタム関数で array_filter() を使用して、しきい値を満たす価格のみを保持し、フィルタリングされた各価格を出現順に個別の行に出力してください。

カスタムコールバック関数は1つのパラメータ(価格)を受け取り、価格がしきい値以上の場合は true を、そうでない場合は false を返す必要があります。

入力形式:

  • 1行目: カンマ区切りの商品価格 (例: 15.99,45.00,8.50,120.00,22.75)
  • 2行目: 数値としての最小価格のしきい値 (例: 20)

期待される出力: しきい値を満たすか、それを超える各価格を、元の順序を維持したまま個別の行に出力します。

自分で試してみよう

<?php
// 入力を読み込む
$prices_input = trim(fgets(STDIN));
$threshold = floatval(fgets(STDIN));

// カンマ区切りの価格を配列に変換する
$prices = array_map('floatval', explode(',', $prices_input));

// TODO: 以下にコードを記述してください
// 価格が threshold 以上かどうかをチェックするカスタムコールバック関数を作成する
// カスタム関数を使用して array_filter() を適用する
// フィルタリングされた各価格を個別の行に出力する

?>
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

論理とフローのすべてのレッスン

自分で練習してみよう: PHPオンラインコンパイラ