ラベル php の投稿を表示しています。 すべての投稿を表示
ラベル php の投稿を表示しています。 すべての投稿を表示

2014年2月7日金曜日

PHP キャメルケースとアンダースコアの相互変換

参考サイト
[PHP] キャメルケースとアンダースコア表記の相互変換

キャメルケースからアンダースコア


/*---------------------------------------------------------------------------*/
public function camelToUnderScore($camel)
{
$underBar = strtolower(preg_replace("/([A-Z])/u", "_$0", $camel));
$underBar = trim($underBar, "_");
return $underBar;
}
/*---------------------------------------------------------------------------*/

アンダースコアからキャメルケース


/*---------------------------------------------------------------------------*/
public function underScoreToCamel($under)
{
$words = explode("_", $under);
$camel = "";
foreach($words as $word) {
$camel .= ucfirst($word);
}
return $camel;
}
/*---------------------------------------------------------------------------*/

2013年12月18日水曜日

php BLOB型を使ってみる

phpってバイナリ操作するためのものないのん? と思っていたらあった。
MySQLのBLOB型というやつとphpのgmp関連のメソッドを使う。

参考サイト
BLOB型とTEXT型
PHP: GMP 関数 - Manual

使用する上でやったことをいくつかメモ的に残しておく。

MySQL:BLOB型のデータを初期化する


バイナリデータを全部初期化したり、新しい行を挿入したりするときに使った。
BLOB型はデフォルト値が設定できないようなので、多分知らないと困る。

/*---------------------------------------------------------------------------*/
INSERT INTO hoge (blob_data) VALUES ("");
UPDATE hoge SET blob_data = "";
/*---------------------------------------------------------------------------*/

空の文字列を渡してやると、空のバイナリデータとして初期化される。
NULLを渡すと中身がNULLになるので注意。

PHP:BLOB型のデータを取得する


phpでデータを取得するときは、バイナリデータを文字列に変換。
さらにそれをgmpのデータに変換して取得する。

/*---------------------------------------------------------------------------*/
$gmpData = gmp_init(bin2hex($blobData), 16)
/*---------------------------------------------------------------------------*/

16進数のデータで受け取る例。他には10進数、8進数が使用可能。
まあ、基本16進数でいいやと思って試してはいない。

PHP:ビットを操作する


/*---------------------------------------------------------------------------*/
gmp_setbit($gmpData, $index, $set);
/*---------------------------------------------------------------------------*/

indexは調べたいビット。setはオンにするならtrue。オフにするならfalseを渡す。

PHP:ビットを取得する


/*---------------------------------------------------------------------------*/
gmp_testbit($gmpData, $index);
/*---------------------------------------------------------------------------*/

MySQL:PHPで操作したデータを更新する


取得したときとは逆に、16進数のデータに変換して、さらにバイナリに変換する。

/*---------------------------------------------------------------------------*/
$hex = gmp_strval($gmpData, 16);
$data =  hex2bin($hex);
/*---------------------------------------------------------------------------*/

gmp_strvalで変換できる。
hex2binに渡すときは、文字列データの長さが偶数じゃないと起こられるので気をつけよう。

以上。思っていたより長くなった。

2013年12月3日火曜日

php DateTimeなんてあったのね

phpで時間を求めるときに今まではdateとかtimeとかを使っていた。
が、php5.2だか5.3以降はDateTimeオブジェクトなるものが用意されているらしい。
2038年問題も解決されているようで、こちらを使ったほうが後々都合がよさそう。
というわけで使ってみた。

参考サイト
PHP 5.3 の DateTime オブジェクト関連の便利な新機能

現在時刻


/*---------------------------------------------------------------------------*/
$now = new DateTime();
/*---------------------------------------------------------------------------*/


文字列から時刻を求める


/*---------------------------------------------------------------------------*/
$time = new DateTime("2013-12-03 04:00:00"););
/*---------------------------------------------------------------------------*/

いくらか足した時間を求める


/*---------------------------------------------------------------------------*/
$interval = DateInterval::createFromDateString("+1 days");
$time = date_add( $updated, $interval );
/*---------------------------------------------------------------------------*/

DateIntervalオブジェクト相対的な日付を求めるために使用するオブジェクトだそうな。
コンストラクタに指定書式の文字列を渡すか、createFromDateStringを呼び出して、
strtotime見たいな使い方ができる。

date_addは読んで字のごとく。オブジェクトのメソッドにもaddがあるのでそっちを使ってもいい。

/*---------------------------------------------------------------------------*/
$time->add( $interval );
/*---------------------------------------------------------------------------*/

比較


/*---------------------------------------------------------------------------*/
$time == $now
$time < $now
$time > $now
/*---------------------------------------------------------------------------*/



他にも色々あるので、そちらは参考サイトや公式のマニュアルを参考に。
個人的には比較が楽でいい。


2013年8月28日水曜日

php 文字列の長さを調べる

フォームからの入力文字数を制限する必要ができた。

phpで文字列の長さを調べる関数は strlen がぱっと出てくる。
しかし、この関数にはちょいとした問題がある。
たとえば

/*---------------------------------------------------------------------------*/

$str = "文字列mozire";
var_dump( strlen( $str ) );

/*---------------------------------------------------------------------------*/

今回の場合欲しい結果は int(12)。
しかし int(15) と表示されてしまう。
strlen は文字エンコーディングを考慮せず
単純にバイト数を引っ張ってくる関数なのでこういう結果になる。

php には文字列の長さを取る関数だけでも複数あるみたいで、
今回の目的にあっているのは mb_strwidth という関数みたい。
文字列の見た目の長さを引っ張ってくる関数。見た目て。

使ってみた。

/*---------------------------------------------------------------------------*/

$str = "文字列mozire";
var_dump( mb_strwidth( $str ) );

/*---------------------------------------------------------------------------*/

ばっちり。ちゃんと int(12) と表示された。

ついでに、入力された文字列を指定の文字数内に丸めるという処理もしたい。
mb_strimwidth という関数がそれをやってくれるようだ。
名前が似ていて間違いそう。

/*---------------------------------------------------------------------------*/

$str = "文字列mozire//ここから切られる";
var_dump( mb_strimwidth( $str, 0, 12 ) );

/*---------------------------------------------------------------------------*/

/ 以下を切り取る。
    string(15) "文字列mozire"
と表示されるはず。
丸める際に丸めた先にくっつけたい文字列も指定できるので、
まだ続きますよという表示のときに使われる...もこれでくっつけられそう。

2013年8月27日火曜日

php 絵文字を判定する

絵文字をチェックしたい。絵文字を取り除きたい。
そんなことを思った。

いくつか方法があるみたいだけど、簡単かつ高速ということで
HTML_Emojiを使ってみる。
公式(?)サイトにあるのは古いのかiPhone5の絵文字には対応していないので
以下からダウンロード。

http://download.revulo.com/PHP/HTML_Emoji-20111114.zip

iPhoneでテストしていたのでこれに気づかずにしばらくはまった。
自分も適当にネット上から見つけてきたものなので、
このファイルの由来がわからんのがちょっと怖い。
誰か知ってたら教えて。

使い方

/*---------------------------------------------------------------------------*/

// HTML_Emoji
require_once 'HTML/Emoji.php';
$backup = error_reporting(0);
$emoji = HTML_Emoji::getInstance();
error_reporting($backup);

// docomoの絵文字
$text = "晴れ\xEE\x98\xBE";

// 絵文字が存在するか?
if( $emoji->hasEmoji( $text ) ) {
    // 絵文字を取り除くs
    $text = $emoji->removeEmoji( $text )
}

/*---------------------------------------------------------------------------*/

getInstanceを呼び出すときに、
PHP5で使うとE_STRICTレベルのエラーが発生する。
PHP5で推奨されない記法(PHP4由来のもの)などに対する警告らしい。
エラー文を抑制するために、

/*---------------------------------------------------------------------------*/

$backup = error_reporting(0);
$emoji = HTML_Emoji::getInstance();
error_reporting($backup);

/*---------------------------------------------------------------------------*/

で挟む。
あとは文字列を各メソッドに渡してやるだけ。
サンプルでいちいちhasEmojiで調べているのは自分の目的が
どちらかというとそっちにあったからで、
実際に使用するときにはいちいちチェックする必要はないです。

2013年8月7日水曜日

php 16進数を扱う

phpで16進数の文字を取り扱うことになった。
変換するための関数があったぞう。

    // number   16進数データ
    // from     変換前の基数
    // to       変換後の基数
    base_convert( $number, $from, $to );

今回は16進数から10進数へ変換する

    $hex = "00000101";
    $dec = base_convert( $hex, 16, 10 );

decの中身が257。
おっけ。

2013年8月5日月曜日

php jsonデータ

PHPではjsonと呼ばれるデータ型を扱えるらしい。
JavaScript Object Notation の略だそうな。

    [[2,1],[33,4]]
    {"2":1,"6":1,"9":1}

こんなん。
{} がオブジェクト形式で : で隣接したデータが対になる。
[] が配列形式だとか。
こいつを文字列データから PHP で使えるデータにデコードする。

    $json = json_decode( '[[2,1],[33,4]]' );
    $json = json_decode( '{"2":1,"6":1,"9":1}', true );

第二引数にtrueを指定すると連想配列になって返ってきます。
ちょいと複雑なごちゃごちゃしたデータをデータベースに保存したりとかに
便利そう。

2013年8月1日木曜日

php 警告文とはいえ放置はよくない

xamppを色々いじってから

    Warning: Module 'pdo_sqlite' already loaded in Unknown on line 0

という警告が出るようになって
何なんだろうと思っていたら、どうやらインストール時に自動的に
読み込んでいるのを再読み込みしていたせいらしい。

PHP Warning: Module '*' already loaded in Unknown on line 0
http://www.omnioo.com/omnioolab/2011/11/php-warning-module-already-loaded-in-unknown-on-line-0.php