この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:12
ページ更新者:guest
更新日時:2026-06-11 07:12:00

タイトル: 内部関数
SEOタイトル: PHP 内部関数完全ガイド (文字列 / 配列 / 数値 / ファイル / 日付)

この記事の要点
  • PHP 内部関数 (組込関数) = require / use 不要で使える標準関数群
  • 文字列: strlen / mb_strlen / str_replace / substr / explode / implode / sprintf
  • 配列: array_map / array_filter / array_reduce / in_array / array_keys / count / sort
  • 数値: intval / floatval / round / ceil / floor / abs / max / min / rand
  • 日付: date / strtotime / mktime / DateTime クラス

PHP 内部関数とは

PHP 内部関数 (built-in functions / internal functions) は、追加の require やオートロード不要で使える標準提供の関数です。C 言語で実装され、PHP のエンジンに直接組み込まれているため高速に動作します。文字列、配列、数値、ファイル、日付、正規表現、JSON、URL、ハッシュなど膨大なカテゴリがあり、PHP 開発の生産性を支えています。

文字列関数

関数用途
strlen($s)バイト長 (ASCII 用)
mb_strlen($s)マルチバイト文字数 (UTF-8)
substr($s, $start, $len)部分文字列
mb_substr($s, $start, $len)マルチバイト対応
str_replace($from, $to, $s)置換
preg_replace($pattern, $to, $s)正規表現置換
explode($sep, $s)区切り文字で配列化
implode($sep, $arr)配列を文字列に結合
sprintf($fmt, ...)フォーマット文字列生成
strtolower / strtoupper大小文字変換
trim / ltrim / rtrim前後空白除去
str_padパディング
strpos / strrpos部分文字列位置
str_contains (8.0+)含有判定
str_starts_with / str_ends_with (8.0+)先頭/末尾判定
// 基本
$s = "Hello, World!";
strlen($s);             // 13
mb_strlen("こんにちは");  // 5 (UTF-8 で 1 文字単位)

substr($s, 7, 5);       // "World"
str_replace("World", "PHP", $s);  // "Hello, PHP!"

// 区切り
explode(",", "a,b,c");   // ["a","b","c"]
implode("-", ["a","b","c"]);  // "a-b-c"

// PHP 8.0+
str_contains("Hello", "ell");        // true
str_starts_with("Hello", "He");      // true
str_ends_with("Hello", "lo");        // true

// sprintf でフォーマット
sprintf("price: %05d JPY", 1234);    // "price: 01234 JPY"
sprintf("%.2f%%", 92.5);              // "92.50%"

配列関数

関数用途
count($arr)要素数
array_map($fn, $arr)各要素を変換
array_filter($arr, $fn)条件を満たす要素のみ
array_reduce($arr, $fn, $init)畳み込み
in_array($x, $arr)含有判定
array_keys / array_valuesキー / 値の配列
array_merge($a, $b)結合
array_combine($keys, $vals)キーと値で連想配列
array_unique($arr)重複除去
sort / rsort / asort / ksort各種ソート
array_slice / array_splice部分取得 / 削除挿入
array_search値からキーを検索
array_column連想配列から列抽出
array_chunkN 個ずつに分割
$nums = [1, 2, 3, 4, 5];

// 各要素を 2 倍
array_map(fn($x) => $x * 2, $nums);  // [2, 4, 6, 8, 10]

// 偶数のみ
array_filter($nums, fn($x) => $x % 2 === 0);  // [2, 4]

// 合計
array_reduce($nums, fn($carry, $x) => $carry + $x, 0);  // 15

// 連想配列の列抽出
$users = [
    ['id' => 1, 'name' => 'Alice'],
    ['id' => 2, 'name' => 'Bob'],
];
array_column($users, 'name');           // ['Alice', 'Bob']
array_column($users, 'name', 'id');     // [1=>'Alice', 2=>'Bob']

// ソート
$arr = [3, 1, 4, 1, 5];
sort($arr);  // [1, 1, 3, 4, 5]
usort($arr, fn($a, $b) => $b - $a);  // [5, 4, 3, 1, 1]

// chunk
array_chunk([1,2,3,4,5,6,7], 3);  // [[1,2,3],[4,5,6],[7]]

数値関数

関数用途
intval($x) / (int)$x整数変換
floatval / (float)浮動小数変換
round($x, $digits)四捨五入
ceil / floor切り上げ / 切り下げ
abs($x)絶対値
max / min最大 / 最小
pow($x, $y) / **べき乗
sqrt / log / exp平方根 / 対数 / 指数
rand / mt_rand / random_int乱数 (推奨は random_int)
number_format($x, 2)桁区切り表示
round(3.14159, 2);          // 3.14
round(2.5);                 // 3 (PHP_ROUND_HALF_UP デフォルト)
round(2.5, 0, PHP_ROUND_HALF_EVEN);  // 2 (銀行家丸め)

ceil(3.1);                  // 4
floor(3.9);                 // 3

number_format(1234567.891, 2, '.', ',');  // "1,234,567.89"

// 暗号学的に安全な乱数
random_int(1, 100);

// 1000-9999 の 4 桁数値
$pin = random_int(1000, 9999);

日付・時刻

// 関数ベース
date('Y-m-d H:i:s');                  // 現在日時 "2026-06-10 12:34:56"
date('Y-m-d', strtotime('+1 day'));    // 明日
date('Y-m-d', strtotime('-1 week'));   // 1 週間前

mktime(12, 0, 0, 6, 10, 2026);         // タイムスタンプ
strtotime('2026-06-10');                // パース

// DateTime クラス (オブジェクト指向、PHP 5.2+)
$dt = new DateTime('2026-06-10');
$dt->modify('+1 month');
echo $dt->format('Y-m-d');             // "2026-07-10"

// DateTimeImmutable (不変、PHP 5.5+)
$dt = new DateTimeImmutable();
$tomorrow = $dt->modify('+1 day');     // 元は変わらない

// 差分
$diff = $dt->diff(new DateTime('2027-01-01'));
echo $diff->days;                       // 日数差

// タイムゾーン
$dt = new DateTime('now', new DateTimeZone('Asia/Tokyo'));

ファイル・I/O

// 全読み込み
$content = file_get_contents('data.txt');

// 全書き込み
file_put_contents('out.txt', "hello\n");
file_put_contents('log.txt', "line\n", FILE_APPEND | LOCK_EX);

// 行単位読込
foreach (file('data.txt') as $line) {
    echo trim($line);
}

// ストリーミング (大きいファイル)
$fp = fopen('huge.txt', 'r');
while (($line = fgets($fp)) !== false) {
    // 処理
}
fclose($fp);

// CSV
$fp = fopen('data.csv', 'r');
while (($row = fgetcsv($fp)) !== false) {
    print_r($row);
}

// 存在 / 種類確認
file_exists($path);
is_file($path);
is_dir($path);
is_readable($path);

// パス操作
basename('/var/www/index.php');    // "index.php"
dirname('/var/www/index.php');     // "/var/www"
pathinfo('/var/www/index.php');    // ['dirname','basename','extension','filename']

JSON / URL / Hash

// JSON
$json = json_encode(['name' => 'Alice', 'age' => 30]);
$arr  = json_decode($json, true);  // true で連想配列

json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

// URL
$encoded = urlencode("hello world&foo=bar");  // "hello+world%26foo%3Dbar"
$decoded = urldecode($encoded);

$query = http_build_query(['q' => 'php', 'page' => 2]);
// "q=php&page=2"

parse_url('https://example.com/path?id=1#sec');
// ['scheme','host','path','query','fragment']

// ハッシュ
md5('hello');                       // 'b1946ac9...'
sha1('hello');
hash('sha256', 'hello');
password_hash('secret', PASSWORD_BCRYPT);  // bcrypt (推奨)
password_verify('secret', $hash);          // 照合

正規表現

// マッチ
if (preg_match('/^\d{3}-\d{4}$/', '123-4567')) {
    echo "電話番号形式";
}

// 全マッチ
preg_match_all('/\d+/', 'a1 b2 c3', $matches);
// $matches[0] = ['1', '2', '3']

// 置換
preg_replace('/\s+/', ' ', "hello   world");  // "hello world"

// コールバック置換
preg_replace_callback('/\d+/', fn($m) => $m[0] * 2, "a1 b2 c3");
// "a2 b4 c6"

// 分割
preg_split('/[\s,]+/', "a, b  c , d");  // ["a","b","c","d"]

変数・型判定

// 型判定
is_string($x);
is_int($x);   // is_integer の別名
is_float($x); // is_double の別名
is_array($x);
is_object($x);
is_null($x);
is_bool($x);
is_numeric($x);  // "42" や "3.14" も true
is_callable($x); // 関数として呼び出せるか

// 型取得
gettype($x);

// 変数の存在
isset($var);     // 定義済 && null でない
empty($var);     // null / "" / 0 / "0" / false / []
is_null($var);

// 変数情報
var_dump($x);   // 型付きダンプ
print_r($x);    // 配列など
debug_backtrace();

FAQ

Q: strlen でマルチバイト文字数が変
A: strlen はバイト数。UTF-8 では「あ」が 3 バイト = 3。文字数なら mb_strlen を使ってください。

Q: rand()random_int() どちらを使う?
A: 一般用途は mt_rand() でも OK ですが、パスワード生成・トークンには必ず random_int() / random_bytes()

Q: 配列ソートで連想配列のキーが変わってしまう
A: sort() はキーを振り直します。キーを保持したいなら asort() (値ソート、キー保持) / ksort() (キーソート) を使ってください。