Author Archives: PHP-Archive

[PHP]ひらがな・カタカナ、大文字・小文字を区別しないソート(並べ替え)

Share on Facebook
Bookmark this on Delicious
LINEで送る
Pocket

標準関数の sort() を使ってひらがな・カタカナの混在する文字列をソートすると、以下のように ひらがな が先、カタカナ が後となるように並び替えられます。

いちご
ぶどう
りんご
オレンジ
バナナ

アルファベットの大文字小文字に関しても同様で、大文字が優先で次に小文字という順番になるため「a, B, c」と並べたくても「B, a, c」となってしまいます。

ひらがな・カタカナ、大文字・小文字を区別せず五十音順に並び替えたい場合など、ソート方法を細かく指定してユーザー独自のルールを作るには usort() を用います。

<?php
$list = [
    'りんご',
    'オレンジ',
    'ぶどう',
    'いちご',
    'バナナ',
];

usort($list, function($a, $b){
    $a = mb_convert_kana($a, 'c');
    $b = mb_convert_kana($b, 'c');
    return strcasecmp($a, $b);
});

print_r($list);
いちご
オレンジ
バナナ
ぶどう
りんご

配列から2つずつ値を取り出し、どちらも同じ時は 0、最初の引数のほうがが大きい時は正の数、二番目の引数のほうが大きい時は府の値を返すようにします。
この処理自体は標準関数 strcmp() が用意されているので、そちらを使うと sort() と全く同じ結果を得ることが出来ます。strcmp() の代わりに strcasecmp() を用いるとアルファベットの大文字・小文字の区別なくソートすることが出来ます。

ひらがなとカタカナの区別をなくす場合両方の値をひらがなかカタカナのどちらかに変換して統一してから比較するようにします。このような変換処理には mb_convert_kana() が使えます。

rsort() のように逆順にソートしたい場合は -1 * strcasecmp($a, $b); のようにして正負を逆転させます。

Posted in PHP | Leave a comment

[PHP]コンフィグファイルから設定情報を読み込むためのConfigクラス

Share on Facebook
Bookmark this on Delicious
LINEで送る
Pocket

PHPファイルに連想配列の形で保存しておいた設定情報を読み込むことが多かったのでスタティッククラスとして定義してみました。
Config::set_config_directory(ディレクトリパス) でコンフィグファイルのディレクトリを指定しておき、Config::get('パス.ファイル名.配列のキー') で情報を取り出せるようにしてあります。単純に Config::get('ファイル名.配列のキー') と書いても動作します。

【使用例】

<?php
require 'Config.php';
Config::set_config_directory(__DIR__ . '/config');
echo  Config::get('app.url');    // http://example.com

設定ファイル config/app.php

<?php
return [
    'url' => 'http://example.com',
    'email' => 'user@example.com',
];

Config.php

<?php
class Config
{
    protected static $directory;

    public static function set_config_directory($directory){
        self::$directory = $directory;
    }

    public static function get_config_directory(){
        return rtrim(self::$directory, '/\\');
    }

    public static function get($route){
        $values = preg_split('/\./', $route, -1, PREG_SPLIT_NO_EMPTY);
        $key = array_pop($values);
        $file = array_pop($values) . '.php';
        $path = (!empty($values)) ? implode(DIRECTORY_SEPARATOR, $values) . DIRECTORY_SEPARATOR : '';
        $baseDir = self::get_config_directory() . DIRECTORY_SEPARATOR;
        $config = include($baseDir . $path . $file);
        return $config[$key];
    }
}

Posted in PHP | Tagged | Leave a comment

[PHP]最低限覚えておきたい必須関数一覧

Share on Facebook
Bookmark this on Delicious
LINEで送る
Pocket

PHP には最初から豊富な関数が用意されていて、特別な記述をしなくてもすぐにそれらを利用できるという特徴があります。
そこで、サイトやアプリケーションを制作する上で、頻繁に使われる関数をリストにし、簡単な説明をつけてみました。
厳選したもののかなりの数がある上、GD関係の関数やPDO、DOMDocument などのクラスメソッドは省略しているのでこれだけあっても本当はまだまだ足りないくらいです。


◆文字列・数値

printf(), sprintf()
文字列をフォーマットに当てはめて出力する。
printf() は出力を行い、sprintf() は結果を文字列として返す。

preg_match(), preg_match_all()
正規表現による一致・検索。preg_match_all() はパターンにマッチしたすべての値を変数に格納する。

preg_replace()
正規表現による置換。パターンにマッチした文字列を指定した文字列に置換する。

preg_quote()
正規表現構文の特殊文字の前にバックスラッシュをつけてエスケープする。

str_replace(), strtr()
文字列の置換。strtr() は複数の文字列のペアを渡して同時に置換できる。

substr(), mb_substr()
文字列の何文字目から何文字取り出すかを指定して文字列の一部分を返す。

strtolower(), strtoupper()
strtolower() はすべてのアルファベットを小文字に変換し、
strtoupper() はすべてのアルファベットを大文字に変換する。

strlen(), mb_strlen()
strlen() は文字列のバイト数を返す。
mb_strlen はマルチバイト文字の文字数を返す。

strpos(), mb_strpos()
文字列の中から指定された文字列が何文字目に存在するかを返す。
大文字小文字を区別しない場合、stripos()、mb_stripos() が用意されている。

mb_convert_encoding()
文字列を指定された文字コードに変換して返す。

mb_convert_kana()
ひらがな・カタカナ、全角・半角を相互に変換する。

trim(), ltrim(), rtrim()
文字列の前後からスペースやタブなどの空白文字や指定された文字を取り除く。
trim() は前後から取り除き、ltrim() は左から、rtrim() は右からのみ取り除く。

mt_rand()
指定された範囲でランダムな数値を返す。
rand() より精度が高い。

is_string()
与えられた値が文字列であるかを返す。

is_int()
与えられた値が整数型であるかを返す。

is_float()
与えられた値が float型(少数) であるかを返す。
is_double() も存在するが内容は is_float() の別名。

is_numeric()
与えられた値が数字として扱えるかを返す。文字列でも良い。

round(), floor(), ceil()
round() は小数部分を四捨五入して返す。
floor() は小数点以下切り捨て、ceil() は小数点以下切り上げで丸める。
桁数を指定することで小数点以下何桁から丸めるかを変更できる。


◆配列

array_slice()
配列の何番目からいくつ取り出すかを指定して取得する。

array_merge(), array_merge_recursive()
配列同士を結合する。array_merge_recursive() は再帰的に結合するため多次元配列でも使える。

in_array()
配列の中に指定された値が含まれているかを返す。

shuffle()
配列をランダムにシャッフルする。

sort(), rsort()
配列を昇順、降順でソート(並び替え)する。キーは新しく割り振られるため、もともとのキーは削除される。

asort(), arsort()
連想配列を昇順、降順でソート(並び替え)する。もともとのキーは保持される。

ksort(), krsort()
配列のキーをもとに昇順、降順でソートする。

usort(), uasort(), uksort()
ユーザーが定義した関数に基づいて配列をソートする。

array_multisort()
複数の配列を他の配列の値をもとにソートする。

array_unique()
配列から重複した値を削除して返す。

array_reverse()
配列の要素を逆順にして返す。

array_shift(), array_pop()
array_shift() は配列の先頭から要素を取り出し、
array_pop() は配列の末尾から要素を取り出す。
元の配列は取り出された分短くなる。

array_walk(), array_walk_recursive()
ユーザー定義関数を配列中のすべての値に適用する。
arra_walk_recursive() は多次元配列に対して再帰的に処理する。

array_search()
配列の中から指定された値を持つ要素を検索し、見つかった場合そのキーを返す。

implode(), explode()
implode() は指定された区切り文字をもとに配列を文字列として結合し、
explode() は指定された区切り文字を元に文字列を配列に変換する。

range()
指定された範囲の整数・文字を持つ配列を作成する。

reset(), end()
reset() は配列のポインタを先頭の要素のセットし、その値を返す。
reset() は配列のポインタを最後の要素のセットし、その値を返す。
実際には配列の最初や最後の要素を取得する目的で使うことが多い。

next(), prev()
next() は配列のポインタを進め、その値を返す。
prev() は配列のポインタを戻し、その値を返す。

current()
現在の配列のポインタが指す値を返す。

extract()
連想配列のキー部分を変数名とする変数を作る。

list()
配列を引数として与えられた複数の変数に分けて代入する。

is_array()
渡された値が配列であるかを返す。


◆ファイル操作

file_get_contents()
ファイルの内容をすべて取得する。また、URLを指定してウェブサイトのソースを取得することもできる。

file_put_contents()
文字列をファイルとして保存する。モードを指定することで追記したり排他ロックが利用できる。

basename()
ファイルやディレクトリのパスから最後にある名前の部分を返す。

dirname()
ファイルパスからディレクトリパスを取り出して返す。
dirname(__FILE__) とすることで実行中のPHPファイルのあるディレクトリを得ることもできる。
これは「__DIR__」と同義。

realpath()
パスの「/./」や「/../」「/」などの参照を全て解決して正規化した絶対パスを返す。

file_exists()
指定されたファイルパスにファイルが存在するかを調べて返す。

fopen()
ファイルやURLをオープンしてストリームに結びつける。

flock()
fopen() によってオープンされたファイルのロック・開放を行う。

fgets()
ファイルポインタから一行取得する。

fgetcsv()
ファイルポインタから一行取得し、指定された文字をもとに区切られた配列を返す。

fwrite()
fopen() によってオープンされたファイルストリームに書き込む。

fclose()
fopen() によってオープンされたファイルポインタをクローズする。

rewind()
ファイルポインタの位置を先頭に戻す。

ftruncate()
fopen() によってオープンされたファイルの内容を指定した長さに丸める。
サイズに 0 を指定することでファイルを空にできる。

feof()
ファイルポインタが終端に達しているかを調べて返す。

is_uploaded_file()
ファイルが HTTP POST によりアップロードされたファイルであるかを調べて返す。
不正操作を防ぐために用いられる。

move_uploaded_file()
ファイルが HTTP POST によりアップロードされたファイルである場合、指定されたファイル名に移動する。

mkdir()
ディレクトリを作る。パーミッションを設定したり入れ子構造のディレクトリを作ることもできる。

unlink()
ファイルを削除する。

rmdir()
ディレクトリを削除する。

rename()
ファイル名を変える。ファイルを移動する。

copy()
ファイルをコピーする。

is_file()
指定されたパスがファイルを指しているかを調べて返す。

is_dir()
指定されたパスがディレクトリを指しているかを調べて返す。

chmod()
ファイルのパーミッションを変更する。

chown()
ファイルのオーナーを変更する。


◆ネットワーク

htmlspecialchars()
HTMLの特殊文字として扱われる文字をHTMLエンティティに変換する。(エスケープ)
「<」などは「&lt;」に変換され、HTMLタグとして扱われることを防げるほか、不正なスクリプトタグを仕込まれて実行されるリスクを回避できる。
大抵は「ENT_QUOTES」フラグを用いてシングルクォートも変換対象にする。

header()
生の HTTP ヘッダーを出力する。
「HTTP/1.0 404 Not Found」などのステータスコードを出力したり、「Content-Type: image/jpeg」などのファイルヘッダーを出力することができる。
「Location: http://www.example.com」とすることで指定された URL にリダイレクトする際にも用いられる。

nl2br()
文字列の改行箇所を「<br>」などの改行タグに変換する。

strip_tags()
文字列から HTML タグを取り除く。許可するタグを指定することもできる。

http_build_query()
連想配列からURLエンコードされたクエリ文字列を生成する。
つまり配列を GET パラメータとして使える「foo=123&bar=hello」のような文字列に変換できる。

rawurlencode(), rawurldecode()
rawurlencode() は非アルファベット文字をパーセント記号と16進数を用いて URL として利用できる文字列に変換する。
rawurldecode() によって元の文字列を復元できる。

filter_input()
GET、POST などのパラメータをフィルタリングしたうえで受け取る。
$_GET、$_POST を直接操作するかわりにこの関数を通す。

filter_var()
指定したフィルターでデータをフィルタリングする。
データがメールアドレスとして正しい書式であるかを調べたり、特殊文字を取り除いたりするなど、様々なフィルタが利用できる。

session_start()
セッションを開始する。セッションIDを渡すことで現在のセッションを復帰することもできる。

session_regenerate_id()
セッションの情報を位置したままセッションIDを新しく生成した値に置き換える。
セッションハイジャック攻撃を防ぐ手段として用いられる。

session_destroy()
セッション情報を全て破棄する。再開するには再度 session_start() する必要がある。

setcookie()
クッキーに値を保存する。有効期限を設定することもできる。

hash()
選択したアルゴリズムに基づいてハッシュ値を生成する。

md5()
MD5 アルゴリズムを用いてハッシュ値を生成する。

password_hash()
選択したアルゴリズムを用いてパスワード用のハッシュ値を生成する。
これによって作成されたパスワードは password_verify() によってマッチしたかを検証できる。

password_verify()
password_hash() によって作られたパスワードと生のパスワード文字列がマッチするかを検証する。

base64_encode(), base64_decode()
文字列を MIME base64 方式でエンコード、デコードする。

json_encode(), json_decode()
連想配列を JSON 形式にして返したり、JSON 形式の文字列を連想配列に変換する。
json_decode() を行う際第二引数に true を指定すると stdClass Object のかわりに連想配列に変換される。

mb_send_mail()
mb_language() により設定された言語に基づいてエンコード変換を行ってメールを送信する。


◆その他

print_r()
変数の内容をわかりやすく表示する。
文字列に限らず連想配列も表示できるほか、第二引数に true を指定することで結果を文字列として返すこともできる。

var_dump()
変数の内容を詳細にダンプする。
含まれるオブジェクトの型、内容を細かく知ることができる。
print_r() よりも詳細な内容を知りたい時に使う。

count()
配列やオブジェクトの要素数を数えて返す。

isset()
変数が宣言されているか、配列にキーが存在するかを返す。
内容が NULL であっても TRUE を返す。配列にキーが存在するかを調べる関数として array_key_exists() があるが、そちらは ["key" => NULL] の場合 FALSE を返す。

empty()
変数の内容が空であるかを返す。空文字、「0」、空配列、NULL、FALSE などがからであると判断される。

unset()
指定した変数を破棄する。連想配列から一部のキーを取り除く際にも使える。

time(), microtime()
現在のUNIXタイムスタンプを得る。
1970年1月1日 00:00:00 GMT からの通算秒。
マイクロ秒まで知りたい場合は microtime() を使う。

mktime()
時、分、秒、月、日、年 を指定することでその日時のUNIXタイムスタンプを得る。

date()
UNIXタイムスタンプを日時を表す文字列としてフォーマットして出力する。
日時の取り扱いに関しては date() よりも DateTime クラスを利用するケースが増えている。

define()
定数を定義する。定数は書き換えられることのない変数のような値で、関数内などあらゆるスコープで利用できる。
大文字のアルファベットで名前をつける習慣がある。


どの関数も一度は使うものばかりですので、名前が思い出せない時のための覚書として役立ててもらえればと思います。

Posted in PHP | Tagged | Leave a comment