'array_map' による変換
CoddyのPHPジャーニー「論理とフロー」セクションの一部 — レッスン 39/68。
array_map()関数は、配列の各要素にコールバック関数を適用することで、すべての要素を変換する強力なツールです。元の配列を修正する関数とは異なり、array_map()は変換された値を持つ完全に新しい配列を作成して返します。
基本的な構文には2つのパラメータが必要です。1つ目は適用したいコールバック関数、2つ目は変換したい配列です。PHPには、array_map()のコールバックとして完璧に機能する組み込み関数が数多く用意されています。
<?php
$names = ["alice", "bob", "charlie"];
$uppercaseNames = array_map("strtoupper", $names);
// 結果: ["ALICE", "BOB", "CHARLIE"]
?>この例では、strtoupper が $names 配列の各要素に適用されます。元の配列は変更されませんが、$uppercaseNames には変換された結果が含まれます。これにより、元の値を保持したままデータを処理したい場合に array_map() が最適となります。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
チャレンジ
簡単2つの入力を受け取ります。カンマ区切りの商品価格のリストと、割引率です。最初の入力は 19.99,25.50,12.75,8.00 のような形式の文字列としての価格で、2番目の入力は数値としての割引率(例:15)です。
両方の入力を読み込み、カンマ区切りの価格を数値の配列に変換し、組み込みの floatval 関数による変換と割引計算を伴う array_map() を使用して各価格に割引率を適用し、割引後の各価格を小数点以下2桁に丸めて、それぞれ個別の行に出力してください。
割引価格を計算するには、元の価格に (100 - discount) / 100 を掛けます。
入力形式:
- 1行目: カンマ区切りの商品価格(例:
19.99,25.50,12.75,8.00) - 2行目: 数値としての割引率(例:
15)
期待される出力: 割引後の各価格を個別の行に出力し、小数点以下2桁に丸めます(例: 16.99, 21.68, 10.84, 6.80)
チートシート
array_map() 関数は、配列の各要素にコールバック関数を適用することで、すべての要素を変換します。この関数は、変換された値を持つ新しい配列を作成して返し、元の配列は変更されません。
組み込み関数を使用した基本構文:
<?php
$names = ["alice", "bob", "charlie"];
$uppercaseNames = array_map("strtoupper", $names);
// 結果: ["ALICE", "BOB", "CHARLIE"]
?>この関数は、コールバック関数と変換対象の配列という2つの引数を取ります。コールバックには、PHPの組み込み関数や無名関数を使用できます。
自分で試してみよう
<?php
// 入力を読み込む
$prices_input = trim(fgets(STDIN));
$discount = floatval(fgets(STDIN));
// カンマ区切りの価格を配列に変換する
$prices = explode(',', $prices_input);
// TODO: 以下にコードを記述してください
// array_map() を使用して、各価格に割引を適用します
// 割引後の各価格を個別の行に出力します
?>このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。