PHPで価格情報を活用する5つの効率的な方法

パソコンの画面に映るPHPのコードPHP
この記事は約12分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

この記事を読めば、PHPで価格情報を効率的に取り扱う方法を身につけることができます。

初心者から経験者まで、誰もが価格情報を取り扱うためのコードを作成する際に必要な知識とスキルを獲得できるでしょう。

また、具体的なサンプルコードと共に、その応用例、注意点、対策、カスタマイズ方法も学ぶことができます。

●PHPと価格情報の取り扱いの基本

○PHPとは?

PHPは、Webアプリケーションの開発に使われるサーバーサイドのスクリプト言語です。

HTMLに埋め込んで使用することも可能で、データベースとの連携も容易に行えるため、価格情報などの動的なデータを扱うのに適しています。

○PHPでの価格情報の取り扱いの基本

PHPで価格情報を取り扱うには、基本的には整数型(int)または浮動小数点型(float)の変数を用います。

また、複数の価格情報を一括で管理したい場合には、配列や連想配列を使用することもあります。

●PHPでの価格情報の取り扱い方法

○サンプルコード1:価格情報を変数に格納する

まず、基本的な価格情報の取り扱い方を見てみましょう。

下記のコードは、価格情報を変数に格納するものです。

<?php
$price = 500; // 価格情報を変数に格納
echo $price;  // 変数を表示
?>

ここでは、「$price」という変数に価格情報「500」を代入しています。そして、その値をechoを用いて表示しています。

○サンプルコード2:価格情報を配列に格納する

次に、複数の価格情報を一括で管理する方法を見てみましょう。

下記のコードは、価格情報を配列に格納するものです。

<?php
$prices = array(100, 200, 300); // 価格情報を配列に格納
print_r($prices);               // 配列を表示
?>

ここでは、「$prices」という配列に複数の価格情報「100」「200」「300」を代入しています。

そして、その配列をprint_r関数を用いて表示しています。

○サンプルコード3:価格情報の演算

価格情報を用いて簡単な演算を行う方法を学びましょう。

下記のコードでは、2つの価格情報の合計を計算しています。

<?php
$price1 = 100;     // 価格情報1
$price2 = 200;     // 価格情報2
$total = $price1 + $price2; // 合計を計算
echo $total;       // 合計を表示
?>

このコードでは、価格情報として「100」と「200」を持つ2つの変数を用いて合計価格を計算しています。

それを「$total」という変数に格納し、その値を表示しています。

○サンプルコード4:価格情報のフォーマット

価格情報を表示する際に、桁区切りや通貨記号を付けたい場合もあります。

下記のコードは、価格情報をフォーマットするものです。

<?php
$price = 30000;        // 価格情報
$price_format = number_format($price); // 価格情報のフォーマット
echo $price_format;    // フォーマット後の価格を表示
?>

この例では、「number_format」関数を使って、「$price」の値「30000」をカンマ区切りの形式に変換しています。

そして、その結果を表示しています。

○サンプルコード5:データベースから価格情報を取得する

多くのウェブアプリケーションでは、価格情報はデータベースに格納されています。

下記のコードは、データベースから価格情報を取得するものです。

<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', 'root', 'password');
$sql = "SELECT price FROM products WHERE id = 1";
$stmt = $dbh->query($sql);
$price = $stmt->fetchColumn();
echo $price;
?>

このコードでは、PDOを使用してデータベースに接続し、SQLクエリを実行して特定の商品の価格情報を取得しています。

この例では、「id」が「1」の商品の価格を取得し、その値を表示しています。

これで基本的な価格情報の取り扱い方法は学びました。

次に、価格情報の応用例について見ていきましょう。

●PHPでの価格情報の応用例

○サンプルコード6:価格の合計を計算する

PHPを用いて価格情報の合計を計算することも可能です。

下記のコードは、配列内の価格情報の合計を計算するものです。

<?php
$prices = array(100, 200, 300); // 価格情報を配列に格納
$total = array_sum($prices);     // 合計を計算
echo $total;                     // 合計を表示
?>

○サンプルコード7:特定の価格範囲の商品を検索する

価格範囲を指定して商品を検索する場合もあります。

下記のコードは、特定の価格範囲内の商品をデータベースから検索するものです。

<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', 'root', 'password');
$min_price = 1000;  // 最低価格
$max_price = 5000;  // 最高価格
$sql = "SELECT * FROM products WHERE price >= :min_price AND price <= :max_price";
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':min_price', $min_price, PDO::PARAM_INT);
$stmt->bindParam(':max_price', $max_price, PDO::PARAM_INT);
$stmt->execute();
$products = $stmt->fetchAll(PDO::FETCH_ASSOC);
print_r($products);
?>

このコードでは、指定された価格範囲内の商品をデータベースから取得しています。

この例では、「price」が「1000」以上かつ「5000」以下の商品を取得しています。

○サンプルコード8:価格情報に基づくランキングを作成する

価格情報をもとに商品ランキングを作成することも可能です。

下記のコードは、価格が高い順に商品をランキング表示するものです。

<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', 'root', 'password');
$sql = "SELECT * FROM products ORDER BY price DESC";
$stmt = $dbh->query($sql);
$products = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($products as $rank => $product) {
    echo ($rank + 1) . '位:' . $product['name'] . ', 価格:' . $product['price'] . "\n";
}
?>

このコードでは、「ORDER BY」句を使って、「price」の値が高い順(降順)に商品を取得しています。

そして、foreachループを使って、各商品のランキングと名前、価格を表示しています。

○サンプルコード9:割引価格を計算する

次に、特定の割引率に基づいて商品の価格を計算するコードを見てみましょう。

この例では、割引率が20%の場合に商品の新しい価格を計算します。

<?php
$original_price = 5000;  // 元の価格
$discount_rate = 0.20;  // 割引率

$discounted_price = $original_price * (1 - $discount_rate);  // 割引価格の計算
echo '割引後の価格:' . $discounted_price . "\n";
?>

このコードでは、元の価格から割引率を引くことで割引後の価格を計算しています。

この例では、5000円の商品が20%割引後、4000円になります。

○サンプルコード10:価格の変動履歴を記録する

価格の変動履歴をデータベースに記録するためのコードも考えられます。

この例では、商品の価格が変わった際に、その変動履歴をデータベースに記録します。

<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', 'root', 'password');

$product_id = 1;  // 商品ID
$new_price = 3000;  // 新しい価格

$sql = "UPDATE products SET price = :new_price WHERE id = :product_id";
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':new_price', $new_price, PDO::PARAM_INT);
$stmt->bindParam(':product_id', $product_id, PDO::PARAM_INT);
$stmt->execute();

$sql = "INSERT INTO price_history (product_id, changed_price) VALUES (:product_id, :changed_price)";
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':product_id', $product_id, PDO::PARAM_INT);
$stmt->bindParam(':changed_price', $new_price, PDO::PARAM_INT);
$stmt->execute();
?>

●注意点と対処法

PHPで価格情報を扱う際には、いくつかの重要な注意点と対処法があります。

○価格情報のデータ型

価格情報は通常、整数または浮動小数点数として扱われます。

しかし、浮動小数点数を使用すると、精度の問題が生じる可能性があるため注意が必要です。

たとえば、0.1 + 0.2を計算すると、期待した0.3ではなく、0.30000000000000004といった結果になることがあります。

このような問題を避けるためには、価格情報をセント単位の整数として扱うのが一般的です。

○数値演算時の注意点

数値演算時には、丸め誤差やオーバーフローに注意する必要があります。

たとえば、大きな数値を扱う場合、計算結果がPHPが扱える最大値を超えると、期待しない結果を得ることがあります。

また、割り算を行う際には、0で割るエラーを防ぐために、分母が0でないことを確認することが重要です。

○SQLインジェクション攻撃への対策

データベースに価格情報を保存する場合、SQLインジェクション攻撃を防ぐための対策が必要です。

SQLインジェクションは、悪意のあるSQLコードがデータベースに注入される攻撃方法で、これによりデータが盗まれたり、改ざんされたりする可能性があります。

これを防ぐためには、SQL文に変数を直接組み込むのではなく、パラメータ化クエリやプリペアドステートメントを使用することが推奨されています。

●カスタマイズ方法

価格情報の取り扱いを簡素化し、効率化するための方法として、関数の利用やフレームワークの活用があります。

○関数を使った処理の簡素化

処理を再利用可能な関数にまとめることで、コードの複雑さを減らし、読みやすさと保守性を向上させることができます。

例えば、割引価格の計算や特定の価格範囲の商品検索など、頻繁に行う処理は関数として定義すると良いでしょう。

次に示すのは、割引価格を計算する関数の例です。

<?php
// 価格と割引率をパラメータとする割引価格計算関数
function calculateDiscountedPrice($price, $discountRate) {
    // 割引価格を計算
    $discountedPrice = $price * (1 - $discountRate / 100);

    // 割引価格を整数に丸めて返す
    return intval($discountedPrice);
}
?>

この関数では、商品の価格と割引率を引数に取り、割引後の価格を計算しています。

この例では、価格と割引率を使って割引価格を計算し、整数に丸めて返しています。

○フレームワークの活用

フレームワークは、特定のプログラミング語言で共通的に必要となる機能を提供し、アプリケーション開発の効率化を図るツールです。

PHPの場合、LaravelやSymfonyなどのフレームワークがあり、これらを利用することで、データベース操作の簡素化やセキュリティ対策、エラーハンドリングなどを効率よく行うことができます。

LaravelのEloquent ORMを利用した商品検索の例を紹介します。

<?php
// LaravelのEloquent ORMを使った商品検索
$products = App\Models\Product::where('price', '>=', $minPrice)
                              ->where('price', '<=', $maxPrice)
                              ->get();
?>

このコードでは、Eloquent ORMを使って特定の価格範囲の商品を検索しています。

この例では、’price’列の値が$minPrice以上、かつ$maxPrice以下の商品を検索しています。

まとめ

この記事では、価格情報の取り扱いについて、具体的なサンプルコードを通じて説明しました。

価格範囲の検索、価格ランキングの作成、割引価格の計算、価格の変動履歴の記録といった一般的なシナリオを通じて、価格情報を効果的に取り扱うためのテクニックを学びました。

また、注意点と対処法についても触れました。

データ型の選択、数値演算の注意点、そして重要なセキュリティ対策であるSQLインジェクションへの対策について説明しました。

最後に、関数を使った処理の簡素化とフレームワークの活用について紹介しました。

これらの技術を駆使することで、より読みやすく、保守性の高いコードを書くことができます。

価格情報の取り扱いは、商品を扱うすべてのウェブアプリケーションで必要となる要素です。

この記事が、その取り扱いを簡素化し、効率化するための一助となれば幸いです。