'array_map' とカスタム関数
CoddyのPHPジャーニー「論理とフロー」セクションの一部。レッスン 40/68。
strtoupper のような組み込み関数は array_map() と相性よく動作しますが、本当の力は自分で作成した custom 関数を使用することから生まれます。これにより、必要にぴったり合う特定の変換を作成できます。
array_map() でカスタム function を使用するには、最初のパラメーターに function 名を string として渡すだけです。カスタム function は 1 つのパラメーター(現在の配列要素)を受け取り、変換された値を返す必要があります。
<?php
function doubleNumber($num) {
return $num * 2;
}
$numbers = [1, 2, 3, 4, 5];
$doubled = array_map("doubleNumber", $numbers);
// 結果: [2, 4, 6, 8, 10]
?>このアプローチでは、各要素をどのように処理するかを完全に制御できます。custom function 内で複雑な計算、文字列操作、その他のロジックを実行できるため、データ変換タスクにおいてarray_map()は非常に柔軟です。
チャレンジ
簡単2つの入力を受け取ります。1つはCelsiusのtemperaturesをcommaでseparatedしたリスト、もう1つはconversionのtarget unit(Fahrenheitの場合はF、Kelvinの場合はK)です。1つ目の入力には、0,10,20,30,100という形式のtemperaturesがstringとして含まれ、2つ目の入力はconversion typeを示す1文字です。
両方の入力をReadし、commaでseparatedされたtemperaturesをnumbersのarrayにconvertし、Celsius temperatureをtarget unitにconvertするcustom functionをCreateし、custom functionとarray_map()を使用してall temperaturesを変換し、各converted temperatureをseparate lineにPrintします。小数点以下2 placesにroundedしてください。
conversion formulas:
- CelsiusからFahrenheitへ:
(C × 9/5) + 32 - CelsiusからKelvinへ:
C + 273.15
Input format:
- 1行目: Celsiusのcommaでseparatedされたtemperatures(例:
0,10,20,30,100) - 2行目: target conversion unit -
FまたはK(例:F)
Expected output: 各converted temperatureをseparate lineにPrintし、小数点以下2 placesにroundedします
自分で試してみよう
<?php
// カンマ区切りの温度を読み取る
$temperatures = fgets(STDIN);
// 目標単位(F または K)を読み取る
$unit = trim(fgets(STDIN));
// カンマ区切りの文字列を数値の配列に変換する
$tempArray = explode(',', trim($temperatures));
// TODO: 以下にコードを書いてください
// 摂氏を目標単位に変換するカスタム関数を作成する
// array_map() を使用してすべての温度に変換を適用する
// 変換された各温度を別々の行に、小数点以下2桁に丸めて出力する
?>このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
論理とフローのすべてのレッスン
自分で練習してみよう: PHPオンラインコンパイラ