このレッスンはただ今 無料公開中 です。

初学者向け マンツーマン プログラミング・レッスン

PHPの組み込み関数

さていよいよ「関数」についての学習に入っていきます。

chapter-2では、変数の使い方を学びました。変数は「値を入れておくもの」でしたね。
本章と次章で学ぶ「関数」とは、「処理をまとめて入れておくもの」と言うことができるでしょう。

ところでPHPの関数には「組み込み関数」と「ユーザー定義関数」があります。組み込み関数とは、PHPにはじめから内蔵されていて、すぐに使うことができる関数です。一方、ユーザー定義関数は文字通りユーザー(開発者)が独自に定義する関数です。

本章では組み込み関数について学習していくことにしましょう。

PHPの組み込み関数

PHPの組み込み関数は、ここでは到底紹介しきれないくらい膨大な数があります。その中でもよく使う関数について、ごく一部をご紹介します。また、いくつかのサンプルコードも掲載します。
全部を覚えようとする必要はありません。関数の名前と、どんなことができるのかについて、ざっと目を通しておて下さい。実際に必要になったときに調べながら使えるようになっていけば、最初のうちはそれで充分です。使っているうちに手が覚えて、やがて調べなくても使えるようになるでしょう。

「調べればすぐわかることは、覚えない」

これもエンジニアに必要な素養のひとつです。覚えることも大切ではありますが、すべてを暗記しようとせず、効率の良い調べ方を習得していくことが肝要です。

尚、「引数」と「戻り値」という言葉が出てきますが、この2つは重要事項となります。次章「ユーザー定義関数」で詳しく解説をします。次章の学習に入ったら、この2つを必ず覚えて理解するようにしてください。それまではサッと流しながら読んでいって構いません。

関数の基本的な使い方

PHPの関数の書き方は次の通りです。

関数名(引数);

関数名のうしろに必ずカッコ ( ) が付きます。カッコの中には「引数」と呼ばれる値を指定します。引数が必須なもの、または複数必要なもの、省略できるものなど、引数の指定の仕方はそれぞれの関数によって決まっています。

出力系

画面にデータの中身を表示させる関数です。

関数 引数 戻り値の型 関数の働き
echo 文字列 なし 文字列を出力する
print 文字列 なし 文字列を出力する
print_r 文字列 なし データ型と値を出力する
var_dump 文字列 なし データ型・値・長さなどを詳細に出力する
func_output.php
<?php
  $text = 'こんにちは。太郎です。'. PHP_EOL;
  echo $text; // 構文
  echo($text); // 関数
  print $text; // 構文
  print($text); // 関数

  $data = ['text' => $text];
  print_r($data);
  var_dump($data);

プログラムを実行して、結果を確認してみてください。

echo や print は構文としてカッコをつけないで使用できますが、 echo()print() のようにカッコをつけて関数としても使えます。どちらも文字列や数値などのデータの中身を出力するのに使います。
print_r()やvar_dump()は、配列やオブジェクトなどの複雑なデータでも詳細に出力することができます。

これらの出力系関数や構文は「プリントデバッグ」と呼ばれるデバッグ(バグ取り)のテクニックの1つとしてよく使われます。

文字列操作系

関数 引数 戻り値の型 関数の働き
strlen 文字列 整数 文字列の長さを返す
mb_strlen 文字列 整数 文字列の長さを返す(日本語対応)
substr 文字列, 位置, 長さ 文字列 文字列を分割する
str_replace 置換対象文字, 置換文字, 文字列 文字列 文字列を置換する
trim 文字列 文字列 前後のスペースを除去する
htmlspecialchars 文字列, (オプション) 文字列 HTMLタグを無効にする
strip_tags 文字列, 許可タグ 文字列 HTMLタグを取り除く
nl2br 文字列 文字列 改行コードの前に改行コードを付ける
implode 区切り文字, 配列 文字列 配列から文字列を生成する
explode 区切り文字, 文字列 配列 文字列から配列を生成する
func_string.php
<?php
  $text = 'こんにちは。太郎です。';
  var_dump(strlen($text));
  var_dump(mb_strlen($text));
  print mb_substr($text, 6, 4). PHP_EOL;
  print str_replace('太郎', '次郎', $text). PHP_EOL;

  $array = ["りんご", "オレンジ", "バナナ"];
  var_dump(implode(',', $array));

  $text = "みかん,メロン,パイナップル";
  var_dump(explode(',', $text));

実行して結果を確かめてみて下さい。

このような文字列操作系の関数を使うことによって、プログラムでできることの幅はぐっと広がります。文字列を何かしら操作したいときは、たいていのことは組み込み関数で用が済みます。どんな関数を使えばよいか知りたい時は php 文字列 (やりたいこと)で検索するとよいでしょう。

(分割・結合・削除・文字数・検索・変換・除去など)

配列操作系

配列を操作する関数はたくさんあります。ここでは一部を紹介します。

関数 引数 戻り値の型 関数の働き
sort 配列 論理値 配列を昇順に並べ替える
resort 配列 論理値 配列を降順に並べ替える
asort 配列 論理値 連想配列の値を昇順に並べ替える
arsort 配列 論理値 連想配列の値を降順に並べ替える
ksort 配列 論理値 連想配列のキーを昇順に並べ替える
krsort 配列 論理値 連想配列のキーを降順に並べ替える
array_push 配列, 追加データ 配列 末尾にデータを追加する
array_pop 配列 配列 末尾のデータを削除する
array_uhshift 配列, 追加データ 配列 先頭にデータを追加する
array_shift 配列 配列 先頭のデータを削除する
array_merge 配列1, 配列2 配列 配列を結合する
array_slice 配列, 開始位置, 長さ 配列 配列を切り出す
array_reverse 配列 配列 データを反転させる
in_array 値, 配列 論理値 値が配列に含まれているか調べる
array_search 値, 検索対象配列, (型チェック) インデックスキー
またはfalse
値が配列に含まれているか調べる(型も比較可能)
func_array.php
<?php
  $numbers = [2, 3, 5, 7, 11, 13];
  sort($numbers);
  print_r($numbers);
  rsort($numbers);
  print_r($numbers);

  $fruits = ['apple', 'banana', 'orange'];
  array_push($fruits, 'grape');
  print_r($fruits);
  array_pop($fruits);
  print_r($fruits);

  $fruits2 = ['malon', 'mango', 'pineapple'];
  print_r(array_merge($fruits, $fruits2));

  var_dump(in_array('strawbery', $fruits));

実行して結果を確かめておきましょう。

これらの関数を駆使することで、配列のデータを自在に操ることができるようになるでしょう。

日付・時刻系

UNIXタイムスタンプとは、協定世界時 (UTC) での1970年1月1日午前0時0分0秒から形式的な経過秒数のことを言います。PHPの日付・時刻系の関数は、このUNIXタイムスタンプを様々な書式の日付・時刻文字列にする date() 関数などがあります。
ただしPHP5.2からは DateTimeクラス が登場し、また現在では Carbon という便利なライブラリがあるため、これらの関数を使う機会はぐっと減りました。

関数 引数 戻り値の型 関数の働き
time なし 整数 UNIXタイムスタンプを返す
mktime 時間, 分, 秒, 月, 日, 年 整数 日付をUNIXタイムスタンプとして返す
date フォーマット, UNIXタイムスタンプ 日付文字列 UNIXタイムスタンプを日付にする
checkdate 月,日,年 論理値 日付の妥当性をチェックする
func_date.php
<?php
  print time(). PHP_EOL;
  print mktime(00, 30, 13, 12, 2019). PHP_EOL;
  var_dump(date('Y-m-d'));
  var_dump(checkdate(12, 31, 2019));

練習問題

次の練習問題1〜3をやってみましょう。尚、雛形となる func_practice.php ファイルが問題文のあとに記載されています。その雛形ファイルの // TODO: の部分を書き加えて、課題を完成させるようにしましょう。

練習問題1

str_replace()関数を使って、次の文字列を指示のとおりに書き換えて下さい。

私は見習いプログラマです。
↓
私はベテランプログラマです。

練習問題2

次の文字列を explode()関数を使って | で分割し、配列に変換して下さい。

"オレンジ|アップル|バナナ|グレープ|パイナップル"

練習問題3

次の配列を、頭文字が abc 順になるように並び替えて下さい。

['orange', 'apple', 'banana', 'grape', 'pineapple']

func_practice.php
<?php
  /*
   * 練習問題1
   */
  $text = '私は見習いプログラマです。';
  // str_replace()を使って「見習い」を「ベテラン」に書き換え
  // TODO:

  print $text . PHE_EOL;

  /*
   * 練習問題2
   */
  $kudamono = 'オレンジ|アップル|バナナ|グレープ|パイナップル';
  // explode()を使って | で分割して配列に変換
  // TODO:

  print_r($kudamono);

  /*
   * 練習問題3
   */
  $fruits = ['orange', 'apple', 'banana', 'grape', 'pineapple'];
  // abc順に並び替え。使用する関数は考えて下さい。
  // TODO:

  print_r($fruits);

それぞれの問題の出力結果は次のようになりましたか?

練習問題1
私はベテランプログラマです。
練習問題2
Array
(
    [0] => オレンジ
    [1] => アップル
    [2] => バナナ
    [3] => グレープ
    [4] => パイナップル
)
練習問題3
Array
(
    [0] => apple
    [1] => banana
    [2] => grape
    [3] => orange
    [4] => pineapple
)