PHPメモ

順不同ですが、最近使ったものを覚えておくことということで

ファイル関係

fopen,fclose
fopenはよく使います。Perlとちがってこんな感じでかきます。

$fp = fopen("***",'r');

第2引数がr,wなどで書き込み、読み込みを指定します。

is_file,is_dir
ファイルの存在を調べるにはこれを使用します。

if(is_dir("***")){...} : ***はパス名

これはPerlでいうファイルテスト演算子みたいなものですね。

flock
いろんなユーザが使用するときにはロックをかけましょ!こんなかんじで

flock(fp,LOCK_EX);

これで排他ロックができます。これで誰かがさわってるときは使えません(^^)

closedir,opendir,readdir
ディレクトリ操作の関数です。これもしょっちゅう使います。

$Dir = opendir("***");
while($file = readdir($Dir)){...}
closedir($Dir);

これはコピペして使えます。カレントディレクトリ、親ディレクトリも取れるので対処が必要!

fgets
ファイルオープンしたらこれで1行ずつ文を取得します。

while(!feof($fp)){
$line = fgets($fp);
}

これもしょっちゅうつかいます。覚えましょう!

tempnam
tempファイルをつくる関数です
これも結構使える関数です。

tempnam(".","TMP");

最初が作成するディレクトリ、次がtempファイルの名前の最初
これなら、TMP***.tmpみたいな感じ

配列関係

配列の関数が豊富なので使いがってがいい! 配列は基本的に連想配列です。これは重要!

array_keys,array_values
まずは、配列のキーと値を返してくれる関数から。

array_keys($array);
array_values($array);

配列はPerlみたいに@arrayとは書かないので、注意!
配列、連想配列、多次元配列など全部一緒にかけるみたいなところがあつい!

array_pop , array_push , array_shift , array_unshift
配列の要素を追加したり、削除したりする関数
これもよく使います。

array_pop($array); :配列の最後の要素を削除 (戻り値:削除される要素)
array_push($array , $a); :配列の最後に追加  

これらもよく使うので要チェック

in_array
配列の要素にみつけたい要素があるかどうかを調べることができる。
これもかなり便利です。

in_array("検索文字",$array); 戻り値 : あればTRUE,なければFALSE

array_splice
これは、要素の置換、削除ができます。

array_splice($array , 0 , 2); 

0は開始する要素の位置、2は削除、置換する配列要素の数。

array_unique
これは超便利です。配列要素の重複を削除できます。

array_unique($array);

たったこれだけでできちゃいます。すっすばらしい!

current , end , key , next , prev , reset
こんどは配列のポインタを移動させる関数です。
これをわすれると、完全にはまります。Perlではポインタを戻してくれるのに!!

end($array);  : 最後の要素
reset($array); : 最初の要素

each , list
これは連想配列のキーと値を同時に扱いたい場合の方法です。

while(list($key,$var) = each($array)){
  ...;
}

なんかPerlで見覚えが!

count
配列の要素の数を数えることもこれでOK!

count($array);

これもしょっちゅう使ってしまいます。

HTML関係

strip_tags
PHPに感謝の関数です!
なんと、この関数を使うと、HTMLタグを除去できちゃうんです。

$string = strip_tags($string);

これだけで、HTMLタグ、なくなっちゃうんです。。
たとえば、<p>や<br>タグだけ残したければ、第二引数に次のように指定すれば
除去されないみたいです
$string = strip_tags($string, '<p><br>');

マルチバイト関係

mb_convert_encoding
プログラムを書くのに、SJIS、EUCーJP、UTF-8などの文字コードを考慮する必要があるとき、この関数を使うと便利です。

$string = mb_convert_encoding($string,"SJIS","EUC-JP");
※これなら、EUC-JP → SJISに変換してくれます。



苦労メモ

これは考えた〜!
メモに残しておかないと

  • 多次元配列のソート


  • 複数の配列や多次元配列のソートには関数としてarray_multisortがあります
    しかし、次のような多次元配列のソートをPHPでしようとすると、意外とめんどくさかった。

    $Array = array($file[0] => array("filename","date","filesize"));

    こんな感じのデータ($file[**])がたくさんあった場合にfilenameやdateなどの要素で
    sortしたい場合などはarray_multisortが使えません。
    よって自分で関数を用意してusortによってソートすることになります。
    これに気づかなかった。。。
    ファイルのダウンロード画面などでよくみるあのソートです。
    こんな感じにすればできました。

    usort($Array , "cmp");
    function cmp($a , $b){
       return strcmp($a[0] ,$b[0] );  <--- ここのaとbの入れ替えで昇順、降順を決められる
    }

    strcmp関数は文字列の長さでその長さの違いを1,0,-1で返す。
    $a[0]の要素の数0は、配列の何番目の要素でソートしたいかを表す。
    よって、dateでソートの場合は$a[1]、filesizeでソートする場合は$a[2]とすればOK!
    できあがった配列$ArrayはきれいにソートされてPHPの関数に感謝できるわけです。


    今回はここまで。またひまがあれば追加していきます。


    [PR]Zcheck:GETI