院生エンジニアのにっき

  • Change style to Blue
  • Change style to Red
  • Change style to Green
  • Change style to Pink

2009-01-08 phpのsprintf(printf)で%を出力する

便利関数sprintfにてパーセント表記をしたい場合

echo sprintf('%0.2f%', $num);

とすると

Warning: sprintf(): Too few arguments

と出てエラーになってしまいます。

そんな場合は「%」を重ねて記述して

echo sprintf('%0.2f%%', $num);

とすればOK

PHP: sprintf - Manual

コメント(0)

2008-12-05 サーバーとしてのPHPとcron処理

ふと疑問に思ったんで。。


なんらかの原因でPHP・プログラムが落ちてしまうような環境を想定して、PHPを長時間動作させたい時、どうすればいいのでしょうか。

結局、「cronで一分ごとに動作確認→動作していなかったら再起動」ってとこで落ち着きそうなんですが、この「動作していなかったら」ってのをどう処理させるのがスマートなのか。


  続きを読む

コメント(0)

2008-11-14 pr関数(preタグ付きdump関数)をもうちょっと便利に

CakePHPの標準関数のpr($vars)は

  1. function pr($vars) {
  2.   echo '<pre>';
  3.   print_r($vars);
  4.   echo '</pre>';
  5. }

な感じの関数でとても重宝しています。

ただ、pr関数を使いまくっていると「どこで呼び出したっけ?」というのが分からなくなって探す・・・といったことがたまに起きてしまいます。

ってわけでpr関数の呼び出しもとの行数も一緒に出力する新版を書いてみました。


  続きを読む

コメント(0)

2008-11-12 PHPで直接MeCabの結果を利用する

Page2にてMecab Extentionなるものも存在するんですが、こちらなどを参考にしてmorph_analysis関数を作ってみました。

やってる内容は至極簡単。

MeCabプロセスに対して文字列を投げて返ってきた値をパースしているだけ。


  続きを読む

コメント(0)

2008-11-11 レーベンシュタイン距離(編集距離)をPHPで

気分転換にレーベンシュタイン距離をPHPで書いてみた(研究と全く関係ないんだけど・・・)

レーベンシュタイン距離の説明は「レーベンシュタイン距離 - Wikipedia」が詳しい。

要は「文字列Aを文字列Bに変換するためにどれだけの操作が必要か」ということ。

1. kitten
2. sitten (“k”を“s”に置換)
3. sittin (“e”を“i”に置換)
4. sitting (“g”を挿入して終了)

でレーベンシュタイン距離=3だそうです。


実装してからLevens・・・と書いてEclipseのコードインテリジェンスで関数候補を見たら「levenshtein」という関数を発見・・・

標準関数でした(PHP: levenshtein


せっかくなんでテストもしてみた。

  1. function LevenshteinDistance($str1, $str2) {
  2.   $d = array ();
  3.   $len1 = strlen($str1);
  4.   $len2 = strlen($str2);
  5.   for ($i1 = 0; $i1 <= $len1; $i1++) {
  6.     $d[$i1] = array ();
  7.     $d[$i1][0] = $i1;
  8.   }
  9.  
  10.   for ($i2 = 0; $i2 <= $len2; $i2++) {
  11.     $d[0][$i2] = $i2;
  12.   }
  13.  
  14.   for ($i1 = 1; $i1 <= $len1; $i1++) {
  15.     for ($i2 = 1; $i2 <= $len2; $i2++) {
  16.       $cost = ($str1[$i1 - 1] == $str2[$i2 - 1]) ? 0 : 1;
  17.       $d[$i1][$i2] = min(
  18.                 $d[$i1 - 1][$i2    ] + 1, //挿入
  19.                 $d[$i1    ][$i2 - 1] + 1, //削除
  20.                 $d[$i1 - 1][$i2 - 1] + $cost //置換
  21.       );
  22.     }
  23.   }
  24.   return $d[$len1][$len2];
  25. }
  26. $test = array(
  27.   array('abc', 'abc'), //0
  28.   array('kitten', 'sitting'), //3
  29.   array('aaaaa', 'bbbbb'),//5
  30.   array('abc', 'bca'),//
  31.   array('12345', '234'),
  32. );
  33. foreach($test as $row) {
  34.   echo levenshtein($row[0], $row[1]);
  35.   echo ' = ';
  36.   echo LevenshteinDistance($row[0], $row[1]);
  37.   echo '<br/>';
  38. }

PHPはこーゆーときの配列処理とかなんか気持ち悪いなと思う。

コメント(0)

2008-11-02 全国都道府県の緯度経度

今感じていること 全国都道府県の緯度経度JSONデータにて全国都道府県の緯度経度情報がJSONとPHPの連想配列(漢字の都道府県名をキーにして文字列で緯度,経度)があったんですが、キーの都道府県が漢字で嫌だったんでアルファベットの都道府県をキーにした配列にしてみました。


  続きを読む

コメント(0)

2008-07-14 Windows+PHP+UTF8環境で日本語のファイル名リストを出力する

なんてことないソースコード(環境はWindows+UTF8のソース)でローカルディレクトリからファイル名リストを取得したかたtんですが、

  1. <?php
  2. $dir = opendir('日本語を含むローカルパス');
  3. while(false !== ($path = readdir($dir))) {
  4.         echo $path.'<br/>';
  5. }
  6. ?>

とすると、oepndirの行でfailed to open dir: Result too large in ** on line 2と怒られてしまいます。

パスのディレクトリは存在しているのでおかしいな・・・と20分ほどはまってしまいました。。


  続きを読む

コメント(0)

2008-04-06 PHPにて、整数のみtrueを返す

PHPで数値のValidate - /halt/Snapshotにて

「普通のぺちぱーはis_numericを使います」とあったのでエントリー

2008-02-10 - kengpong)のエントリーについて


  続きを読む

コメント(0)

2008-04-06 phpで無効な文字をエンコードした際の代替文字を指定する

バイトでSJISで渡ってきたはしご高や自作の外字を取り除くロジックを考える必要があったのですが、たまたま見たサイトで素晴らしい関数を見つけてしまいました。


  続きを読む

コメント(0)

2008-03-08 PHPでRSS用のpubDateをパース、再変換する方法

RSS出力のあるプログラムで、必要だったんでちょっと調べてみると、

PHPでpubDateをタイムスタンプに変換する方法

にありました。至極簡単。昨日とはうってかわってPHP凄い便利。


  続きを読む

コメント(0)


<< previous
 | next >>