*PHP逆引き [#s68f5884]
#contents
&tag(PHP,逆引き,サンプル);
**スクリプトの情報 [#r4556239]
***定数 [#zd156274]
:[[get_defined_constants:http://jp.php.net/manual/ja/function.get-defined-constants.php]]| 全ての定数の名前とその値を連想配列として返す 

自分の設定した定数を表示する
 $defined = get_defined_constants(true);
 print_r($defined['user']);
**ベンチマーク(PEAR) [#h1a4ed79]
http://pear.php.net/package/Benchmark/download
***使用例 [#id8a38ca]
 require_once 'Benchmark/Timer.php';
 $timer = new Benchmark_Timer();
 $timer->start();
 //処理
 for($i = 0; $i < 10000; $i++) {
 	//なんかの処理
 	echo "hoge\n";
 }
 $timer->setMarker('Marker 1');
 //処理
 for($i = 0; $i < 10000; $i++) {
 	//なんかの処理
 	echo "fuga\n";
 }
 $timer->stop();
 $timer->display();
表示例
||~time index|~ex time|~%|
|~Start|1190693185.30569800|CENTER:-|0.00%|
|~Marker1|1190693185.30657100|0.00087308883667|26.04%|
|~Stop|1190693185.30905100|0.00248003005981|73.96%|
|BGCOLOR(silver):~total|BGCOLOR(silver):CENTER:-|BGCOLOR(silver):0.00335311889648|BGCOLOR(silver):100.00%|

**オブジェクト [#c7d3faa8]
***オブジェクトを結合する [#i52151fb]
:1.それぞれのオブジェクトに入ったメンバ変数をあわせて別のオブジェクトとして返す|
 function object_merge(&$obj1, &$obj2, &$result) {
     $vars = get_object_vars($obj1);
     foreach ($vars as $key => $val) {
         $result->$key = $val;
     }
     $vars = get_object_vars($obj2);
     foreach ($vars as $key => $val) {
         $result->$key = $val;
     }
     return $result;
 }
 
 $a =& new stdClass();
 $a->a = "aaaa";
 
 $b =& new stdClass();
 $b->b = "bbb";
 
 $c =& new stdClass();
 object_merge($a, $b, $c);

:2.番外編|
 <?php
 $a =& new stdClass();
 $a->a = "aaaa";
 
 $b =& new stdClass();
 $b->b = "bbb";
 
 $c = (object)( (array)$a + (array)$b );
 ?>

**ヘッダー [#r7d7cceb]
***指定したURLへ飛ばす [#y86a0966]
 header("Location: http://hoge.com/");
***表示する文字コードを指定する [#v0b73da7]
-Shift_JISで表示
 header("Content-Type: text/html; charset=Shift_JIS");
-EUC-JPで表示
 header("Content-Type: text/html; charset=EUC-JP");
**文字列 [#vc5d36e5]

****全角->半角,半角->全角,かな->カナ,カナ->かな 変換 [#sdbf13d5]
&size(17){''[[mb_convert_kana:http://jp.php.net/manual/ja/function.mb-convert-kana.php]]''};~

>string ''mb_convert_kana'' ( string str, string option [, mixed encoding])
>
mb_convert_kana()は、文字列 str に関して「半角」-「全角」変換を行い、変換された文字列を返します。この関数は、日本語のみで使用可能です。 
>
option は変換オプションです。デフォルト値 は、"KV"です。 
> 
encoding は文字エンコーディングで、省略された場合は内部文字エンコーディングが使用されます。

***適用可能な文字を全てHTMLエンティティに変換する [#pffe8474]
&size(17){''[[htmlentities:http://jp.php.net/manual/ja/function.htmlentities.php]]''};~

>string ''htmlentities'' ( string string, int [quote_style], string [charset])
>
この関数はhtmlspecialchars()と同じですが、
HTML エンティティと等価な意味を有する文字をHTMLエンティティに変換
します。htmlspecialchars()と同様に、シングルま
たはダブルクオートに関する動作を示すオプションの第2の引数をとりま
す。ENT_COMPAT(デフォルト)の場合は、ダブルク
オートのみを変換し、シングルクオートをそのままにします。ダブルお
よびシングルクオートを共に変換します。
ENT_NOQUOTESはダブルクオートおよびシングルク
オートを共に変換しません。 
>
現在のところ、ISO-8859-1 文字セットがデフォルトの文字エンコーディングとして使用されます。オプションの2番目の引数は、PHP 3.0.17およびPHP 4.0.3で追加されました。 
>
htmlspecialchars()と同様に、この関数はオプションの3番目の引数をとり、変換に使用される文字セットを指定可能です。この引数はPHP 4.1.0で追加されました。 

***HTMLエンティティを元の形に戻す [#ib7a9797]
&size(17){''unhtmlentities''};~

string ''unhtmlentities'' (string string)

 function unhtmlentities ($string) {
     $trans_tbl = get_html_translation_table (HTML_ENTITIES);
     $trans_tbl = array_flip ($trans_tbl);
     return strtr ($string, $trans_tbl);
 }

***分割文字を使用し指定した文字数に文字列を分割する [#aa8adb6d]
&size(17){''[[wordwrap:http://jp.php.net/manual/ja/function.wordwrap.php]]''};~

>string ''wordwrap'' ( string str, int [width], string [break], int [cut])
>
(オプションの) width パラメータで指定したカラム番号で文字列str を分割します。(オプションの)break パラメータを用いて行は分割されます。
>
width またはbreak が 指定された場合、wordwrap()は75カラムで自動的に分割し、'\n'(改行)を用いて分割します。
>
cut が1に設定された場合、文字列は常に指定した幅でラップされます。このため、指定した幅よりも長い単語がある場合には、分割されます。 (2番目の例を参照下さい)

***分割文字を使用し指定した文字数に文字列を分割する(mb対応) [#a9ac89e3]
&size(17){''mb_wordwrap''};~

string ''mb_wordwrap'' ( string str, int [width], string [break], int [cut])

マルチバイト対応を作ってみた
75バイトで分割されます。$cutは意味ないね。。。
 function mb_wordwrap($str, $width = 75, $break = "\n", $cut = 1) {
     $width = (int)$width / 2;
     $len = mb_strlen($str);		//---文字列の長さ取得
     $count = (int)($len / $width);
     if ( $count == 0 ) {
         return $str;
     }
     for($i = $index = 0; $i < $count or ($index <= $len * 2); $index += $width, $i++){
         $tmp = $tmp.mb_strcut($str, $index, $width).$break;
     }
     return trim($tmp);
 }


***文字列を固定長の他の文字列で埋める [#f5c0a8f5]
&size(17){''[[str_pad:http://jp.php.net/manual/ja/function.str-pad.php]]''};~

>string ''str_pad'' ( string input, int pad_length [, string pad_string [, int pad_type]])
>
この関数は文字列 input の左、右または両側を指定した長さで埋めます。オプションの引数 pad_stringが指定されていない場合は、 input は空白で埋められ、それ以外の場合は、pad_string からの文字で制限まで埋められます。 
>
オプションの引数pad_type には、 STR_PAD_RIGHT,STR_PAD_LEFT, STR_PAD_BOTHを指定可能です。pad_type が指定されない場合、STR_PAD_RIGHT を仮定します。
>
pad_length の値が負または入力文字列の長さよりも短い場合、埋める操作は行われません。

***二つの文字列の間を固定長の他の文字列で埋める [#t70fe966]
&size(17){''str_pad_center''};~

string ''str_pad_center'' (string input1, string input2, int pad_length, string [pad_string])

 function str_pad_center($input1,$input2,$pad_length, $pad_string = " ") {
     $input1_len = strlen($input1);
     $input2_len = strlen($input2);
     $pad_count = $pad_length - ($input1_len + $input2_len);
     return $input1.str_repeat($pad_string,$pad_count).$input2;
 }

**ファイル [#v0a2f462]
***ファイルのモードを変更する [#jb1d9bf3]
&size(17){''[[chmod:http://jp.php.net/manual/ja/function.hmod.php]]''};~

***ファイルの所有者を変更する [#ac51d2ea]
&size(17){''[[chown:http://jp.php.net/manual/ja/function.chown.php]]''};~
***PHPファイルをハイライト表示する [#e4e91049]
&size(17){''[[show_source:http://jp.php.net/show_source]]''};~
***パスからファイル名を得る [#ldc310fb]
&size(17){''[[basename:http://jp.php.net/manual/ja/function.basename.php]]''};~

>string ''basename'' ( string path [, string suffix])
>
この関数は、ファイルへのパスを有する文字列を引数とし、ファイルのベース名を返します。
ファイル名が、 suffixで終了する場合、この部分もカットされ ます。 Windows では、スラッシュ(/)とバックスラッシュ (\)の両方がパス区切り文字として使われます。その他の環境ではスラッシュ(/)になります。

***パスからディレクトリ名を得る [#ze5d7c9e]
&size(17){''[[dirname:http://jp.php.net/manual/ja/function.dirname.php]]''};~

>string ''dirname'' ( string path)
>
この関数は、ファイルへのパス名を有する文字列を引数とし、ディレクトリの名前を返します。

**配列 [#v2ec84dd]
***配列から一つ以上の要素をランダムに取得する [#l6726a2c]
&size(17){''[[array_rand:http://jp.php.net/manual/ja/function.array-rand.php]]''};~

>mixed ''array_rand'' ( array input [, int num_req])
>
array_rand()は、配列から一つ以上のランダムなエントリを取得しようとする場合に有用です。この関数は、配列inputおよびオプションとして num_req を引数とします。この引数は、取得するエントリの数を指定します。指定されない場合は、デフォルトの1になります。 
>
エントリを一つだけ取得する場合、array_rand()はランダムなエントリのキーを返します。その他の場合は、ランダムなエントリのキーの配列を返します。これにより、ランダムなキーを取得し、配列から値を取得することが可能になります。

***指定した値を配列で検索し、見つかった場合に対応するキーを返す [#uc66c97c]
&size(17){''[[array_search:http://jp.php.net/manual/ja/function.array-search.php]]''};~

>mixed ''array_search'' ( mixed needle, array haystack [, bool strict])
>
haystackにおいて needleを検索し、配列中に見付かった場合にそ のキーを返します。そうでない場合にFALSEを返します。 
>
注意: PHP 4.2.0以前では、array_search() は、失敗した場合にFALSEではなくNULLを返します。 
>
オプションの3番目のパラメータstrictに TRUEが指定された場合、array_search()はhaystackの中で needleの型に一致するかどうかも確認します。 

***配列をシャッフルする [#x064e828]
&size(17){''[[shuffle:http://jp.php.net/manual/ja/function.shuffle.php]]''};~

>void ''shuffle'' ( array array)
>
この関数は、(要素の順番をランダムにするために)配列をシャッフルします。PHP 4.2.0以降、srand()または mt_srand()によりランダム数生成器にシードを与える必要はありません

***二つ以上の配列をマージする [#zeb7f5be]
&size(17){''[[array_merge:http://jp.php.net/manual/ja/function.array-merge.php]]''};~

>array ''array_merge'' ( array array1, array array2 [, array ...])
>
前の配列の後ろに配列を追加することに より、二つ以上の配列の要素をマージし、得られた配列を返します。 
>
入力配列が同じキー文字列を有していた場合、そのキーに関する後に指定された値が、前の値を上書きします。しかし、配列が同じ添字番号を有していても 値は加算されるため、このようなことは起きません。

***配列の値を反転にする [#c3faa098]
&size(17){''[[array_flip:http://jp.php.net/manual/ja/function.array-flip.php]]''};~

>array ''array_flip'' ( array trans)
>
array_flip() は、配列を反転して返します。すなわち、transのキーは値となり、 transの値はキーとなります。 
> 
>transの値は有効なキーを必要とすることに注意して下さい。すなわち、キーは、integerまたは stringである必要があります。ある値が間違った型である場合、警告が出力され、問題のこのキー/値の組は逆順にされません。
>
ある値が複数回出現した場合、最後のキーがその値として使用され、その他の 値は失われます。
>
array_flip()は失敗した場合にFALSEを返します。 

**画像 [#u2317407]
***画像のサイズを得る [#a5b91223]

**その他 [#r08a7bd0]
***[[年齢を出す:http://ponk.jp/php_time/index.php?page=2]]  フォーマット(1989-10-09) [#p0d12cc7]
 function calc_age($birth)
 {
     $ty = date("Y");
     $tm = date("m");
     $td = date("d");
     list($by, $bm, $bd) = explode('-', $birth);
     $age = $ty - $by;
     if($tm * 100 + $td < $bm * 100 + $bd) $age--;
     return $age;
 }
***postgresの配列を表す要素をPHPの配列で返す [#wa0fa1c9]
&size(17){''splitDbArray''};~

array ''splitDbArray'' (array array_data)

splitDbArrayはPostgresQLの配列フォーマット({a,b,c})を分解し、
PHPの配列として返します。
 function splitDbArray($array_data) {
     if ( preg_match("/\{(.+)\}/",$array_data,$matchs) ) {
         return split(",",$matchs[1]);
     } else {
         return $array_data;
     }
 }

***絶対値を得る [#x4438457]
&size(17){''[[abs:http://jp.php.net/manual/ja/function.abs.php]]''};~

>mixed ''abs'' ( mixed number)
>
numberの絶対値を返します。引数numberがfloatの場合は 帰り値もfloatとなり、その他の場合は、intを返します。(これは、floatの範囲は、intよりも広いためです。)