様々な関数を使う - PHP入門
目次
- PHP入門
- PHPの概要
- PHP環境のインストール(XAMPP)・PHPの設定
- PHPの基本・簡単なプログラム
- 文法1
- 文法2
- 様々な関数を使う
- フォームの基本
- システム作成
- オブジェクト指向
- データベースとSQL
- PHPでMySQLを使う
- ブログを作る
- ECサイト(ショッピングサイト)を作る
このページの内容
はじめに
PHPには様々な用途で使うために標準で用意された数千もの関数群があり、PHPを使う上での大きなメリットとなっています。この章では「日時を扱う関数」「文字列を扱う関数」「ファイルを扱う関数」「配列を扱う関数」の4つのカテゴリに分けて、よく使う関数を解説します。さらに自分で関数を作成する方法も説明します。日時を扱う関数
まずは日付と時刻を扱う関数について見て行きましょう。PHPマニュアルの該当ページ(http://php.net/manual/ja/ref.datetime.php)を参照すると沢山の関数が並んでいます。ここではよく使われる関数について、解説とサンプルプログラムを示します。time関数
time関数は、現在時刻をUnixタイムスタンプ形式(1970年1月1日0:0:0からの通算秒)として返します。このUnixタイムスタンプ形式を直接使うことはほとんどありませんが、様々な日時関数の引数で使います。time.php
<?php
echo "現在のUnixタイムスタンプ:";
echo time();
?>
date関数
date関数は、第1引数で指定したフォーマット文字列によって第2引数で指定したUnixタイムスタンプ形式の日時をフォーマットして文字列として返します。第2引数を省略した場合は、現在時刻をフォーマットします。Y | 年(4桁の数値) |
m | 月(2桁の数値、2桁に満たない場合は0を付ける) |
d | 日(2桁の数値、2桁に満たない場合は0を付ける) |
H | 時(2桁の数値、2桁に満たない場合は0を付ける) |
i | 分(2桁の数値、2桁に満たない場合は0を付ける) |
s | 秒(2桁の数値、2桁に満たない場合は0を付ける) |
t | その月の日数(28~31) |
w | 曜日の数値(日曜→ 0、月曜→ 1、…土曜→ 6) |
date関数の例を示します。
date.php
<?php
$d1 = date('Y/m/d H:i:s');
$d2 = date('Y年m月d日 H時i分s秒');
$d3 = date('H:i:s', time() + 60);
echo "現在時刻は $d1 です。<br>";
echo "現在時刻は $d2 です。<br>";
echo "現在時刻の60秒後は $d3 です。<br>";
?>
$d1と$d2は現在時刻の年月日時分秒の間を記号や漢字で区切って返しています。$d3は第2引数で「time() + 60」とすることにより、現在時刻の60秒後の時刻が入ります。mktime関数
mktime関数は、引数で指定された時刻のUnixタイムスタンプを返します。引数は順番に「時、分、秒、月、日、年」を指定します。特定の時刻を扱いたいときによく使われます。mktime.php
<?php
$t = mktime(8, 24, 30, 6, 10, 2011);
echo date('Y/m/d H:i:s', $t);
?>
strtotime関数
strtotime関数は、引数で指定された文字列を解釈してUnixタイムスタンプを返します。月や年をまたぐような日時計算が簡単にできます。「now」は現在時刻、「+n week」でn週間後、「+n days」でn日後、「+n hours」でn時間後、など様々な文字列を引数に持てます。+のところを-にすると過去の時間を返すこともできます。strtotime.php
<?php
$d1 = date('Y/m/d H:i:s',
strtotime('now'));
$d2 = date('Y/m/d H:i:s',
strtotime('+5 week 3 days'));
echo "現在時刻は $d1 です。<br>";
echo "現在時刻から5週間と3日後は $d2 です。<br>";
?>
簡易カレンダー
では、ここまで学んだ日時関数を使って、「簡易カレンダー」を作ってみましょう。以下のプログラムは、今月のカレンダーを表示します。cal1.php
<?php
$weeks = array('日','月','火','水','木','金','土');
$now = time();
$y = date('Y', $now);
$m = date('n', $now);
$last = date('t', $now);
echo "<h1>{$y}年{$m}月のカレンダー</h1>";
for ($d = 1; $d <= $last; $d++) {
$t = mktime(0, 0, 0, $m, $d, $y);
$w = date('w', $t);
echo "{$d}日({$weeks[$w]}) ";
}
?>
簡易カレンダーの解説
$weeks = array('日','月','火','水','木','金','土');
日付関数では曜日の文字を日本語で出力することはできないので、まず$weeks配列に曜日の文字を格納しておきます。
$now = time();
次にtime関数によって現在日時のタイムスタンプを$nowに格納します。
$y = date('Y', $now);
$m = date('n', $now);
$last = date('t', $now);
次にdate関数によって$yに今年の年の数字、$mに今月の月の数字、$lastに今月の日数を格納しています。
for ($d = 1; $d <= $last; $d++) {
$t = mktime(0, 0, 0, $m, $d, $y);
$w = date('w', $t);
echo "{$d}日({$weeks[$w]}) ";
}
for文で変数$dに今月の日を1日から最終日までループして表示します。その際に、date関数の引数に「w」を付けて曜日の数値を取得し、その数値を元に$weeks配列から曜日の文字を取得しています。文字列を扱う関数
PHPからHTMLを生成する際に、文字列を処理しなくてはならない場面が多々出てきます。PHPでは文字列を扱う関数も数多く用意されていますが、ここではその中でもよく使うものを紹介します。詳しくはマニュアル(http://php.net/manual/ja/ref.strings.php)を参照してください。htmlspecialchars関数
htmlspecialchars関数は、引数で指定した文字列のHTMLタグなどを無効にして返します。フォームから受け取った文字列を画面に出力する際は、必ずこの関数を通さないとセキュリティホールの原因となります。また、第2引数に「ENT_QUOTES」を付けたほうがより安全になります。以下のプログラムでは、最初に見出しタグを有効にした文字列を表示し、次に見出しタグを無効にした文字列を表示しています。
htmlspecialchars.php
<?php
$h = "<h1>見出し</h1>";
echo $h;
echo htmlspecialchars($h);
?>
str_replace関数
str_replace関数は、文字列の置換を行います。第1引数で置換前の文字列、第2引数で置換後の文字列、第3引数で置換対象の文字列を指定し、置換の完了した文字列が返ります。以下のプログラムは文章$bunの中の「うどん」という文字を「そば」に置換しています。
str_replace.php
<?php
$bun = '私はうどんが大好きです。うどん無しでは生きていけません。うどんうどん!<br>';
echo $bun;
$bun2 = str_replace('うどん', 'そば', $bun);
echo $bun2;
?>
explode関数, implode関数
explode関数は文字列を指定した区切り文字によって分割します。implode関数は配列を指定した区切り文字で連結します。以下のプログラムは、explode関数で文字列をカンマで区切って配列として取り出し、implode関数で「#」文字を挟んで再び文字列にしています。
explode.php
<?php
$men = 'うどん,そば,ラーメン,パスタ';
$array = explode(',', $men);
print_r($array);
echo "<br>";
$men2 = implode('#', $array);
echo $men2;
?>
print_r関数は、引数で指定した配列等の内容を分かりやすく表示してくれるデバッグ用関数です。mb_substr関数
mb_substr関数は、第1引数で指定した文字列を指定した場所から指定した文字数だけ切り出す関数です。第2引数で開始位置を指定します。最初の文字が0番目になることに注意してください。第3引数で文字数を指定します。substr.php
<?php
$str = '今日はうどんを食べました。';
$sub = mb_substr($str, 3, 3);
echo $sub;
?>
「mb_」の付かない「substr」関数もありますが、バイト単位の扱いとなり日本語をうまくカウントできないことがあるので使わない方が良いでしょう。mb_strlen関数
mb_strlen関数は、引数で指定した文字列の長さを返す関数です。strlen.php
<?php
$str = 'こんにちは。';
$num = mb_strlen($str);
echo "「{$str}」の長さは{$num}です。";
?>
「mb_」の付かないstrlen関数もありますが、長さをバイト単位で返してしまい、日本語の場合は長さが変わってしまう場合があるので使わない方が良いでしょう。ファイルを扱う関数
PHPからファイル関数を使って簡単にファイルの読み書きをすることができます。よく使うものをいくつか紹介します。詳しくはマニュアル(http://php.net/manual/ja/ref.filesystem.php)を参照してください。file_get_contents関数, file_put_contents関数
file_get_contents関数は引数で指定したファイルを全て文字列として読み込んで返します。file_put_contents関数は第1引数で指定したファイルに第2引数で指定した文字列を書き込みます。以下のプログラムはシンプルな訪問者カウンタです。現在の訪問者数を記録するファイルが必要なので「counter.txt」というテキストファイルを作って「0」とだけ書いてcounter.phpと同じ場所に保存しておいてください。
counter.php
<?php
$count = file_get_contents('counter.txt');
$count++;
file_put_contents('counter.txt', $count);
echo "あなたは{$count}番目の訪問者です。";
?>
counter.txt
0
ブラウザをリロードするたびにカウントアップされます。file_get_contents関数によってcounter.txtに書かれている現在の訪問者数を読み込み、$countに格納します。次に$countの値を+1し、file_put_contents関数によって同じファイルに上書きしています。file_exists関数
file_exists関数は、引数で指定したファイルが存在する場合はTRUE、存在しない場合はFALSEを返します。以下のプログラムでは「counter.txt」が存在すれば「ファイルが存在します。」、存在しなければ「ファイルが存在しません。」と表示されます。
file_exists.php
<?php
if (file_exists('counter.txt')) {
echo "ファイルが存在します。";
} else {
echo "ファイルが存在しません。";
}
?>
file関数
file関数は引数で指定したファイルの内容を一行ずつ配列に格納する関数です。以下のプログラムは、file.txtの内容を読んで一行ずつ配列に格納し、先頭に行番号を付けて出力しています。
file.php
<?php
$lines = file('file.txt');
for ($i = 0; $i < count($lines); $i++) {
echo $i + 1;
echo ":{$lines[$i]}<br>";
}
?>
file.txt
うどん
そば
ラーメン
パスタ
配列を扱う関数
続いて配列を扱う関数をいくつか紹介します。詳しくはマニュアル(http://www.php.net/manual/ja/ref.array.php)を参照してください。array_push関数, array_pop関数, array_unshift関数, array_shift関数
array_push関数は配列の末尾に要素を追加します。array_pop関数は配列の末尾から要素を取り除きます。array_unshift関数は配列の先頭に要素を追加します。array_shift関数は配列の先頭の要素を取り除きます。この4つの関数を使ったサンプルを示します。
array_push.php
<?php
$mens = array('うどん','そば','ラーメン');
print_r($mens); echo "<br>";
array_push($mens, 'パスタ');
print_r($mens); echo "<br>";
array_pop($mens);
print_r($mens); echo "<br>";
array_unshift($mens, 'そうめん');
print_r($mens); echo "<br>";
array_shift($mens);
print_r($mens); echo "<br>";
$mens[] = 'フォー';
print_r($mens); echo "<br>";
?>
3つの要素からなる配列にarray_push関数で末尾に要素を追加し、次にarray_pop関数で末尾の要素を削除し、次にarray_unshift関数で先頭に要素を追加し、次にarray_shift関数で先頭の要素を削除しています。
$mens[] = 'フォー';
この文は、配列の末尾に要素を追加します。「array_push($mens, 'フォー');」と書いた場合と全く同じです。sort関数
sort関数は配列を昇順(小→大順、アルファベットならa→z順、ひらがなならあいうえお順)に並び替えます。rsort関数は配列を降順(大→小順)に並び替えます。順番に並び替えることを「ソート」と言います。以下のプログラムは、4人のふりがなをまず昇順にソートして表示し、次に降順にソートして表示しています。
sort.php
<?php
$mens = array('やまだ','たなか','すずき','ほんだ');
sort($mens);
print_r($mens); echo "<br>";
rsort($mens);
print_r($mens); echo "<br>";
?>
array_splice関数
array_splice関数は、配列の一部を削除し、他の要素で置き換える機能を持つ、とても汎用性の高い関数です。第1引数で配列を指定し、第2引数で置き換える場所、第3引数で置き換える長さ、第4引数で置き換える要素を指定します。array_splice.php
<?php
$mens = array('うどん','そば','ラーメン','パスタ');
array_splice($mens, 1, 2, 'そうめん');
print_r($mens); echo "<br>";
array_splice($mens, 2, 0, 'フォー');
print_r($mens); echo "<br>";
array_splice($mens, 1, 2);
print_r($mens); echo "<br>";
?>
array_splice($mens, 1, 2, 'そうめん');
2番目の要素から2個(そば・ラーメン)を削除し、そのかわりに「そうめん」で置き換えています。
array_splice($mens, 2, 0, 'フォー');
3番目の要素の前に「フォー」を追加しています。第3引数を0にすると配列の削除をせずに追加のみができるのです。
array_splice($mens, 1, 2);
2番目の要素から2個(そうめん・フォー)を削除しています。第4引数を省略すると要素の削除のみを行い、置き換えはしません。ユーザー定義関数
関数は用意されたものだけではなく、自分で作成することもできます。「ユーザー定義関数」と言います。似たような処理を繰り返す場合は、関数にしてまとめるとスッキリします。ユーザー定義関数の構文は以下のようになります。
function 関数名(引数1, 引数2, …) {
処理
return 戻り値;
}
引数は複数持つことができます。returnの後ろに戻り値を書いて呼び出し元に戻り値を返すこともできます。ユーザー定義関数の例(二乗を計算する関数)
簡単なユーザー定義関数の例を示します。以下のプログラムは、引数で指定した値($x)の二乗を計算して返す関数「square」を定義しています。一番下のecho文で引数に16を指定して関数を呼び出しています。func1.php
<?php
function square($x) {
return $x * $x;
}
echo square(16);
?>
ユーザー定義関数の例(見出し要素を生成する関数)
もうひとつユーザー定義関数の例を示します。以下のプログラムは、第1引数に見出しの文字列、第2引数に見出しレベルを渡すと、HTMLの見出し要素を生成して返す関数「hn」を定義しています。func2.php
<?php
function hn($str, $level) {
$html = "<h$level>$str</h$level>";
return $html;
}
echo hn("見出し1", 1);
echo hn("見出し2", 2);
echo hn("見出し3", 3);
?>