関数の概要
PHPの sscanf 関数は、文字列を指定した書式に従って解析し、複数の値に分解するための関数です。入力文字列から特定のフォーマットに基づいて値を抽出できるため、例えばログや入力データの解析でよく使われます。
パラメータの説明
- string:解析する元の文字列を指定します。
- format:解析に用いる書式指定文字列を指定します。フォーマットは
printf系の書式と同様です。例:%d(整数)、%s(文字列)、%f(浮動小数点数)など。 - …$vars(可変引数):解析した値を格納する変数を指定します。数値や文字列など複数指定できます。指定しなければ結果は配列で返されます(PHP 8.0以降)。
戻り値
sscanf は、解析に成功した値の個数(整数)を返します。引数で値を受け取らなかった場合は、解析結果を配列で返します。解析に失敗した場合は false を返すこともあります。
使用例
基本的な使い方
$str = "100 20.5 apple";
sscanf($str, "%d %f %s", $intVal, $floatVal, $strVal);
echo "整数: $intVal, 浮動小数: $floatVal, 文字列: $strVal";
この例では、文字列 “100 20.5 apple” から整数、浮動小数点、文字列をそれぞれ取り出し、変数に格納しています。
戻り値で取得する例(PHP 8.0以降)
$str = "ID: 12345 Name: John";
$result = sscanf($str, "ID: %d Name: %s");
var_dump($result);
戻り値として配列が返るため、取得した値は変数で受けなくても済みます。結果は array(2) { [0]=> int(12345) [1]=> string(4) "John" } となります。
時刻の解析例
$time = "2024-06-01 15:30:45";
sscanf($time, "%d-%d-%d %d:%d:%d", $year, $month, $day, $hour, $min, $sec);
echo "年: $year, 月: $month, 日: $day, 時: $hour, 分: $min, 秒: $sec";
日付と時刻をそれぞれの要素に分解し、個別の変数として扱えるようにしています。
関連する関数
sprintf:書式指定して文字列を生成する関数printf:書式指定して文字列を出力する関数fscanf:ファイルから書式指定で読み取る関数explode:区切り文字で文字列を分割する関数(書式指定ではない)
まとめ
sscanf は、文字列を柔軟に解析し、数値や文字列を簡単に取り出すことができるPHPの便利な関数です。書式を指定することで、ログ解析やユーザー入力の分解処理を効率よく行えます。初心者でも比較的使いやすく、実務でもデータ処理時に役立つためぜひ覚えておきましょう。
