【PHP8.x】min関数の使い方

作成日: 更新日:

min関数は、与えられた複数の値の中から、あるいは配列の要素の中から最も小さい(最小の)値を見つけ出して返す関数です。数値や文字列の最小値を効率的に取得する際に役立ちます。

この関数には、比較したい値をカンマ区切りで複数引数として渡すか、または一つの配列を引数として渡すことができます。例えばmin(10, 5, 20)min([10, 5, 20])で最小値5が返されます。文字列の比較も同様に可能です。

値の比較はPHPの標準的なルールに従い、異なる型の値が混在する場合は内部的な型変換が試みられます。意図しない結果を避けるため型を揃えることが推奨されます。

PHP 8.0.0以降では、引数が一つだけ(かつそれが配列ではない)場合はTypeErrorがスローされますので注意が必要です。戻り値は最小値ですが、空の配列が引数だとfalseが返されます。

基本的な使い方

構文(syntax)

<?php
echo min(10, 2, 5, -3);
?>

引数(parameters)

mixed $value, mixed ...$values

  • mixed $value: 比較対象となる最初の値。整数、浮動小数点数、文字列、配列、NULLなどが指定可能です。
  • mixed ...$values: 比較対象となる残りの値。カンマ区切りで複数指定可能です。省略も可能です。

戻り値(return)

mixed

与えられた引数の中で最も小さい値を返します。数値または文字列を比較し、それらの最小値を返します。

サンプルコード

PHPによるHTML minify処理

<?php

/**
 * 文字列をminifyするサンプルコード
 *
 * @param string $html HTML文字列
 * @return string minifyされたHTML文字列
 */
function minifyHTML(string $html): string
{
    $html = preg_replace('/<!--(.|\s)*?-->/', '', $html); // コメントを削除
    $html = preg_replace('/\s+/', ' ', $html); // 複数空白を1つに
    $html = preg_replace('/>\s+</', '><', $html); // タグ間の空白を削除
    $html = trim($html); // 前後の空白を削除

    return $html;
}

// 使用例
$html = '
<!DOCTYPE html>
<html>
<head>
    <title>Example</title>
    <!-- これはコメントです -->
    <style>
        body {
            background-color: #fff;
        }
    </style>
</head>
<body>

    <h1>Hello, world!</h1>

</body>
</html>
';

$minifiedHtml = minifyHTML($html);

echo $minifiedHtml;

このサンプルコードは、PHPでHTML文字列をminify(最小化)する関数minifyHTMLを定義しています。minifyとは、HTMLファイルから不要な空白やコメントを取り除き、ファイルサイズを小さくする処理のことです。

minifyHTML関数は、引数としてHTML文字列を受け取り、minifyされたHTML文字列を返します。具体的な処理内容は以下の通りです。

  1. preg_replace('/<!--(.|\s)*?-->/', '', $html): HTMLコメントを正規表現で検索し、削除します。
  2. preg_replace('/\s+/', ' ', $html): 連続する空白文字を、一つの空白文字に置換します。
  3. preg_replace('/>\s+</', '><', $html): HTMLタグ間の空白文字を削除します。例えば、> <>< に変換します。
  4. trim($html): 文字列の先頭と末尾にある空白文字を削除します。

これらの処理により、HTMLの構造を維持しつつ、不要な空白やコメントを取り除き、ファイルサイズを削減することができます。minifyされたHTMLは、ウェブページのロード時間を短縮し、パフォーマンスを向上させる効果が期待できます。$html変数にminify前のHTMLを代入し、minifyHTML関数に渡すことでminify処理を実行し、結果を$minifiedHtml変数に格納しています。最後に、echoを用いてminifyされたHTMLを出力しています。

このサンプルコードは、HTMLのminify(圧縮)処理を行う関数minifyHTMLを定義しています。注意点として、このminify処理は簡易的なもので、HTML構造を解析しているわけではありません。そのため、HTMLの構文によっては意図しない結果になる可能性があります。例えば、JavaScriptやCSS内に記述された空白やコメントまで削除してしまう可能性があります。より高度なminifyを行う場合は、専用のライブラリ(例:HTMLMinifier)の利用を検討してください。また、preg_replace関数は正規表現を使用するため、正規表現の知識が必要です。処理対象のHTMLサイズが大きい場合、パフォーマンスに影響が出る可能性があるため、注意が必要です。

PHPのmin関数で最小値を取得する

<?php

/**
 * min関数を使ったサンプルコード
 */

// 数値の最小値を求める
$minValue = min(1, 5, 2, 8, 3);
echo "数値の最小値: " . $minValue . PHP_EOL; // 出力: 1

// 配列の最小値を求める
$numbers = [4, 7, 1, 9, 2];
$minValueFromArray = min($numbers);
echo "配列の最小値: " . $minValueFromArray . PHP_EOL; // 出力: 1

// 複数の配列から最小値を求める (PHP 5.0.0 以降)
$array1 = [1, 2, 3];
$array2 = [4, 5, 6];
$minValueFromArrays = min($array1, $array2);
echo "複数の配列の最小値: ";
print_r($minValueFromArrays); // 出力: Array ( [0] => 1 [1] => 2 [2] => 3 )
echo  PHP_EOL;

// 文字列の最小値を求める (辞書順)
$string1 = "apple";
$string2 = "banana";
$minString = min($string1, $string2);
echo "文字列の最小値: " . $minString . PHP_EOL; // 出力: apple

// 異なるデータ型の最小値を求める (注意: 型によって結果が異なる)
$mixedValue = min(5, "10", 3.14);
echo "異なるデータ型の最小値: " . $mixedValue . PHP_EOL; // 出力: 3.14
?>

PHPのmin関数は、与えられた引数の中から最小の値を返す関数です。引数には、数値、配列、文字列など、様々なデータ型を指定できます。複数の値を引数として渡すことも、配列を単独で渡すことも可能です。

サンプルコードでは、まず数値の最小値を求めています。min(1, 5, 2, 8, 3)のように引数を列挙すると、最も小さい 1 が返されます。

次に、配列の最小値を求める例です。min($numbers) のように配列を渡すと、配列内の最小値 1 が返されます。

PHP 5.0.0 以降では、複数の配列を引数に渡すことも可能です。この場合、配列同士が比較され、辞書順で最も小さい配列が返されます。

文字列の最小値を求めることもできます。文字列は辞書順で比較され、min("apple", "banana") の場合は "apple" が返されます。

異なるデータ型を混在させた場合、型の種類によって比較方法が異なり、予期せぬ結果になる可能性があるため注意が必要です。例えば、min(5, "10", 3.14) の場合、PHPは文字列 "10" を数値として扱い、その結果、最小値は 3.14 となります。

min()関数は、引数の中で最小の値を返します。数値だけでなく、配列や文字列も比較できます。

複数の配列を引数に渡した場合、min()関数は配列全体を比較し、最も小さい配列を返します。配列の要素ごとの比較ではない点に注意が必要です。

異なるデータ型を比較する場合、PHPは型変換を行うため、予期せぬ結果になることがあります。例えば、文字列と数値を比較すると、文字列が数値に変換されて比較されることがあります。

文字列は辞書順で比較されます。大文字小文字は区別されますので、注意してください。

min()関数を使う際は、比較する値の型を意識し、意図しない型変換が起こらないように注意することが重要です。

【PHP8.x】min関数の使い方 | いっしー@Webエンジニア