PHPでよく使う関数まとめ(自分用)
if()関数 - もし○○なら~ ××する(条件分岐)
$int = 500;
if($int < 1000){
echo '1000未満です 少ないので800足します<br />';
$int = $int+800;
}
echo $int;
結果
1000未満です 少ないので800足します
1300
htmlspecialchars()関数 - 半角の<>’”&を無効にする(エスケープ処理)
function h($string) {
return htmlspecialchars($string,ENT_QUOTES,'UTF-8');
}
str_replace()関数 - 特定の文字列を置き換える
(str_replace()関数は、アルファベットの大文字,小文字を区別する)
$zip = '570-0031';//郵便番号っぽい文字列
$henkan = str_replace("-","",$zip);//$zipからハイフンを取り除いた
echo $henkan;
結果
5700031
str_replace()関数で複数置換したい場合は、配列を使用します
function hantai($str){//ユーザー関数作成
$tikan_mae = array('嫌い','いらない','まずい');
$tikan_go = array('好き','欲しい','おいしい');
return str_replace($tikan_mae,$tikan_go,$str);
}
$message = '私はあなたのことが大嫌い<br />'.
'彼女はいらない<br />'.
'マグロはまずい<br />';
echo hantai($message);
結果
私はあなたのことが大好き
彼女は欲しい
マグロはおいしい
大文字と小文字を区別しないで置換したい場合は、str_ireplace()関数を使います
実験 (まずは、str_replaceの挙動から)
$yahoo = '大文字 YAHOO 小文字 yahoo';
$google = str_replace("yahoo","google",$yahoo);
echo $google;
結果
大文字 YAHOO 小文字 google
実験の結果より
str_replace()関数はアルファベットの大文字小文字を区別するという事が判明しました
次は同じことを str_ireplace()関数でやります
$yahoo = '大文字 YAHOO 小文字 yahoo';
$google = str_ireplace("yahoo","google",$yahoo);
echo $google;
結果
大文字 google 小文字 google
trim()関数 - 文字の最初と最後の半角空スペースをとり、特定の文字(指定した場合)を消去(最初と最後だけ)
$text = ' 空スペースの 混じった 文字列 ';//最後は全角スペースを入れています
echo trim($text);
結果
空スペースの 混じった 文字列
ぱっと見た感じわかりませんが やはり全角スペースは取り除けないようです
trim()関数で特定の文字を取り除く例 (文字列の最初と最後のみしか取り除けません)
$moji = "---タイトル---";
echo trim("-",$moji);
結果
タイトル
上記の例のように 文字列の前後にある連続した文字列を全部取り除く事ができます
require()関数 - ファイルを読み込む (読み込みに失敗したらエラーがでて 止まる)
include()関数 - ファイルを読み込む (読み込みに失敗してもエラーはでるがその後の処理は続く)
require_once()関数 - ファイルを一度だけ読み込む
include_once()関数 - ファイルを一度だけ読み込む
require_once('nantoka.php');
//絶対パスで読み込む例
require_once realpath(dirname(__FILE__)).'./../dir1/dir2/tekitou.php';
header()関数 - ヘッダーに出力する
header()関数を使用する場合
ヘッダーに何も出力されていない状態で関数を使わないとエラーになります
また、文字コードが UTF-8の場合はテキストを 「BOMなし」で保存しないとエラーになります
header("Location: nantoka.php");
exit;
for()関数 - 繰り返し処理をする
forを使ってテーブルを作る例
<?php
echo "<table border='1'>";
for($tate=0;$tate<5;$tate++){
echo "<tr>";
for($yoko=0;$yoko<5;$yoko++){
echo "<td>セル</td>";
}
echo "</tr>";
}
echo "</table>";
?>
結果
セル セル セル セル セル セル セル セル セル セル セル セル セル セル セル セル セル セル セル セル セル セル セル セル セル
nl2br()関数 - 改行コードを<br>タグに変換して表示する
$text = '1行目'."\n".'2行目'."\n".'3行目';
echo nl2br($text);
結果
1行目
2行目
3行目
mb_strlen()関数 - 文字列の長さを調べる
mb(マルチバイト)関連の関数は必ず文字コードを指定してください
文字コードを指定しない場合は 「あ」← 2文字でカウントされたりします
$moji = '今日もがんばったなぁ';
$moji_str = mb_strlen($moji,'UTF-8');//必ず文字コードを指定してください
echo $moji_str;
結果
10
swich()関数 - 特定の条件で分岐する
for($y=0; $y<=5; $y++){
switch($y){
case 0 : echo '〇';
break;
case 1 : echo '|';
break;
case 2 : echo ' ̄';
break;
case 3 : echo '|';
break;
case 4 : echo '_';
break;
case 5 : echo '=3';
break;
}
}
結果
〇| ̄|_=3
isset()関数 - 変数に値があるか(セットされているか)調べる
$hensuu = 5;
if(isset($hensuu)){
echo '変数はセットされています';
}else{
echo '変数はセットされていません';
}
変数はセットされています
move_uploaded_file()関数 - ファイルをアップロードさせる(ファイルを移動させる)
まずは下準備
1.imgというフォルダを同じ階層につくる
2.imgフォルダのパーミッションを777に設定(windowsの場合不要)
3.フォームを設置する
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="upfile" size="40" />
<input type="submit" name = "upload" value="画像をアップロード" />
</form>
ここからファイルアップロード(開始タグと終了タグ省略)
if ($_POST["upload"]) {
$imgtype = ($_FILES['upfile']['type']);
$img_str = mb_strlen(trim(@$_FILES['upfile']['name']),'UTF-8');
if ($imgtype == "image/gif"){ $kakutyousi = 'gif';} //拡張子をつけるだけ
if ($imgtype == "image/jpeg"){ $kakutyousi = 'jpg';}
if ($imgtype == "image/pjpeg"){ $kakutyousi = 'jpg';}
if ($imgtype == "image/png") { $kakutyousi = 'png';}
if ($imgtype == "image/x-png"){ $kakutyousi = 'png';}
//↓imgフォルダへのパス(自分の環境によって変える)
$moveimg = "img/".time().'.'.$kakutyousi;
//$_FILES['upfile']['type']は偽装されるので↓で画像かどうか判別
$chkimage = @getimagesize($_FILES['upfile']['tmp_name']);
if($img_str <> 0){ //ファイルが選択されたか・・
if ($_FILES["upfile"]["size"] < 400000){ //ファイルサイズ
if(($chkimage['mime'] == "image/gif")
||($chkimage['mime'] == "image/jpeg")
||($chkimage['mime'] == "image/pjpeg")
||($chkimage['mime'] == "image/png")
||($chkimage['mime'] == "image/x-png")){
if(move_uploaded_file($_FILES["upfile"]["tmp_name"],$moveimg)) {
$newfilename = time().'.'.$kakutyousi;
echo $newfilename. "をアップロードしました。<br />";
echo '<img src="'.$moveimg.'" /><br />';
}
} else { echo "拡張子が正しくありません";}
} else { echo "ファイルサイズが大きすぎます";}
} else { echo "ファイルが選択されていません";}
}
mb_substr()関数 - 文字列の一部を取り出す
マルチバイト関連の関数は文字コードを必ず指定して下さい
$text = '来週のサザエさん';
echo mb_substr($text,0,2,'UTF-8');//1文字目から2つ取り出した
echo '<br />';
echo mb_substr($text,3,5,'UTF-8');//4文字目から5つ取り出した
結果
来週
サザエさん
substr()関数 - 文字列の一部を取り出す(1byte文字用)
基本的な使い方は mb_substrと同じだけどこっちは シングルバイト用
0から始まり -を指定すると 最後の文字が-1となり -2だと最後から2文字を取り出す
ちょっとややこしい
$str = substr("abcdef", 0);// "a" を返す
$str = substr("abcdef", -2);// "ef" を返す
$str = substr("abcdef", 0, -1);//abcdeを返す(最後の一文字を取り除いた!(よく使う)
$str = substr("abcdef", -1);// "f" を返す
$str = substr("abcdef", 2, -1);
// "cde" を返す(「2」、つまり「c」から始まり最後の1文字を取り除いた文字列)
substr_count()関数 - 文字列の中で指定する文字が何回でてくるかカウントする
mb_substr_count()関数 - 文字列の中で指定している文字が何回出現するかカウントする(マルチバイト用)
$text = 'iphone imac ipad ipod';
echo substr_count($text,'i');//$textの中で「i」が何回出現するかカウント
結果
4
strip_tags()関数 - HTMLタグおよびPHPタグを取り除く
strip_tags($text);
strip_tags($text,'<a><b>');
上のように第二引数で使用可能なタグを指定できるが
脆弱性があるので使わないように・・・
preg_match()関数 - 正規表現によってマッチングを行う
こちらのページで正規表現のチェックができますのでお使い下さい
preg_match("/検索パターンを表す文字列/", 比較文字列)
preg_matchの使用例
$int = 1234;
if(preg_match("/^[0-9]{2,3}$/",$int)){
//2桁もしくは3桁の数字だけで構成されている場合マッチ
echo 'マッチしました';
}else{
echo 'マッチしませんでした';
}
結果
マッチしませんでした
preg_matchを使用し、文字列が含まれているかマッチングさせる例
$text = '私は天才です';
if(preg_match("/[天才]/u",$text)){
//文字コードがUTF-8の場合は 最後にuをつけます
echo '文字列に天才が含まれています';
}else{
echo '文字列に天才が含まれていません';
}
結果
文字列に天才が含まれています
上記の例の場合 preg_match()をわざわざ使用しなくても、
mb_strpos()関数を使用すれば、文字列に'天才'が含まれるかどうかはすぐに検証できます
上の例はUTF-8を使用する場合は u オプションをつけなくてはいけないということを書くためです
preg_match()関数の処理は結構重たい処理なので
どうしても preg_match()でないと検証できない場合のみ使用します
if(preg_match("/[a-z]/", $str)) {
echo "a~zのいずれかが含まれる文字列です。";
}
if(preg_match("/[0-9]/", $str)) {
echo "0~9のいずれかが含まれる文字列です。";
}
if(preg_match("/^0\d{9,11}$/",$tel)) {//d は [0-9]と同じ意味
echo "0からはじまり 0~9の数字で構成されてる9桁~11桁の数字です";
}
if(preg_match('/^([0-9]{3}-[0-9]{4})?$/i', $zip)) {
echo '郵便番号として正しい';
}
if(preg_match("/^[-+.\\w]+@[-a-z0-9]+(\\.[-a-z0-9]+)*\\.[a-z]{2,6}$/i",$str)){
echo 'メールアドレスとして正しい';
}
こちらのページで正規表現のチェックができますのでお使い下さい
preg_match_all()関数 - 正規表現によって連続してマッチングを行う
文字列の中で何回も連続してマッチングさせる場合はこちらを使用します
$text =<<< owari
コメ印以降の文字色を変更するスクリプトです ※これはコメントです
2行目です ※コレ以降は文字色が変わります
※いきなり出てきても変ります
owari;
//$patternは ※から行末まで 最後のuはUTF-8用のオプションです
$pattern = "/[※].*\n/u";
preg_match_all($pattern,$text,$match);
パターンにマッチした文字列が
$match[0][0]から順番に格納される (2個目のデータなら $match[0][1]となる)
なぜ多次元配列なのか、よくわかりません
foreach($match[0] as $key=>$val){
$match2[] ='<span style="color : lightskyblue;">'.$match[0][$key].'</span>';
//普通の配列に戻しつつ背景色を「lightskyblue」に
}
$text2 = str_replace($match[0],$match2,$text);
//マッチした部分($match[0])を$match2に置換します
echo $text2;
結果
コメ印以降の文字色を変更するスクリプトです ※これはコメントです
2行目です ※コレ以降は文字色が変わります
※いきなり出てきても変ります