'array_map' とカスタム関数
CoddyのPHPジャーニー「論理とフロー」セクションの一部 — レッスン 40/68。
strtoupper のような組み込み関数は array_map() とうまく連携しますが、真の力は独自のカスタム関数を使用することにあります。これにより、正確なニーズに合わせた特定の変換を作成できます。
array_map() でカスタム関数を使用するには、第1引数として関数名を文字列で渡すだけです。作成するカスタム関数は、1つのパラメータ(現在の配列要素)を受け取り、変換された値を返す必要があります。
<?php
function doubleNumber($num) {
return $num * 2;
}
$numbers = [1, 2, 3, 4, 5];
$doubled = array_map("doubleNumber", $numbers);
// 結果: [2, 4, 6, 8, 10]
?>このアプローチにより、各要素の処理方法を完全に制御できます。カスタム関数内で複雑な計算や文字列操作、その他のロジックを実行できるため、array_map() はデータ変換タスクにおいて非常に汎用性が高くなります。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
チャレンジ
簡単2つの入力が与えられます。1つはカンマ区切りの摂氏(Celsius)温度のリスト、もう1つは変換先の単位(華氏の場合は F、ケルビンの場合は K)です。最初の入力には 0,10,20,30,100 という形式の文字列として温度が含まれており、2番目の入力は変換タイプを示す1文字です。
両方の入力を読み込み、カンマ区切りの温度を数値の配列に変換してください。摂氏温度をターゲットの単位に変換するカスタム関数を作成し、そのカスタム関数で array_map() を使用してすべての温度を変換し、変換された各温度を小数点以下2桁に丸めて、それぞれ別の行に出力してください。
変換式:
- 摂氏から華氏へ:
(C × 9/5) + 32 - 摂氏からケルビンへ:
C + 273.15
入力形式:
- 1行目: カンマ区切りの摂氏温度(例:
0,10,20,30,100) - 2行目: 変換先の単位 -
FまたはK(例:F)
期待される出力: 変換された各温度を、小数点以下2桁に丸めて、それぞれ別の行に出力します。
チートシート
関数名を文字列として渡すことで、カスタム関数を array_map() で使用できます。カスタム関数は1つの引数(現在の配列要素)を受け取り、変換後の値を返す必要があります。
<?php
function doubleNumber($num) {
return $num * 2;
}
$numbers = [1, 2, 3, 4, 5];
$doubled = array_map("doubleNumber", $numbers);
// 結果: [2, 4, 6, 8, 10]
?>このアプローチにより、要素の処理を完全に制御できるようになり、関数内での複雑な計算、文字列操作、または任意のカスタムロジックが可能になります。
自分で試してみよう
<?php
// カンマ区切りの温度を読み込む
$temperatures = fgets(STDIN);
// 対象の単位(FまたはK)を読み込む
$unit = trim(fgets(STDIN));
// カンマ区切りの文字列を数値の配列に変換する
$tempArray = explode(',', trim($temperatures));
// TODO: 以下にコードを記述してください
// 摂氏を対象の単位に変換するカスタム関数を作成する
// array_map() を使用して、すべての温度に変換を適用する
// 変換された各温度を、小数点以下2桁に丸めて、個別の行に出力する
?>このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。