sscanf

関数の概要

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の便利な関数です。書式を指定することで、ログ解析やユーザー入力の分解処理を効率よく行えます。初心者でも比較的使いやすく、実務でもデータ処理時に役立つためぜひ覚えておきましょう。