_onichannn

【PHP】正規表現で否定の条件を指定する。

めも。

否定先読み表現を用いる。

例えば下記のような感じ。

$str = 'aaabbbcccddd';

$pt = '/^(?!.*abbbc).*$/';

$res = preg_match($pt, $str);

var_dump($res);

↓

int(0)

上記は$strの中に「abbbc」という文字が含まれていない場合に1を返す。今回は「abbbc」が含まれているため0が返される。
パターンを下記の様にした場合は当然1が返却される。

$str = 'aaabbbcccddd';

$pt = '/^(?!.*abbc).*$/';

$res = preg_match($pt, $str);

var_dump($res);

↓

int(1)

否定の条件が作れただけで正規表現の幅がぐっと広がった。

一方、肯定先読みというものもあり例は下記の通り。

$str = 'aaabbbcccddd';

$pt = '/^(?=.*abbbc).*$/';

$res = preg_match($pt, $str);

var_dump($res);

↓

int(1)

この場合、指定した文字列「abbbc」がターゲットの中に存在している場合、1を返すようになる。

【PHP】日付文字列をパースして情報を取得する。

めも。

date_parse()関数を用いる。

$date = '2013-12-09 10:10:10.002345';

$info = date_parse($date);

var_dump($info);

↓

array(12) {
  ["year"]=>
  int(2013)
  ["month"]=>
  int(12)
  ["day"]=>
  int(9)
  ["hour"]=>
  int(10)
  ["minute"]=>
  int(10)
  ["second"]=>
  int(10)
  ["fraction"]=>
  float(0.002345)
  ["warning_count"]=>
  int(0)
  ["warnings"]=>
  array(0) {
  }
  ["error_count"]=>
  int(0)
  ["errors"]=>
  array(0) {
  }
  ["is_localtime"]=>
  bool(false)
}

strtotime()関数に渡せるフォーマットであれば解析してくれる。

 

【MySQL】1文字単位で文字を置換する。

めも。

TRANSLATE()関数を用いる。

TRANSLATE('000111222333', '0123, 'aBcD');

例えば上記のような使い方をした場合、「000111222333」中の「0」は「a」、「1」は「B」、「2」は「c」、「3」は「D」に置換される。

次に下記のような使い方をした場合。

TRANSLATE('000111222333', '0123, 'aBc');

「3」に対応する文字列が存在しないため、「000111222333」中の「3」は空白文字列に置き換わる。

 

【PHP】JSONエンコード、デコード処理中に発生したエラーを取得する。

めも。

json_last_error()を用いる。

$str = '{"hoge": "foo", "piyo"}';

$json = json_decode($str);

$err = json_last_error();

var_dump($err);

↓

int(4)

返却される整数値に対応する定数は下記の通り。
上から順に0,1,2,3,4,5と対応する。

JSON_ERROR_NONE
JSON_ERROR_DEPTH
JSON_ERROR_STATE_MISMATCH
JSON_ERROR_CTRL_CHAR
JSON_ERROR_SYNTAX
JSON_ERROR_UTF8

 

【PHP】秘密鍵を用い、指定したアルゴリズムでハッシュを生成する。

めも。

hash_hmac()関数を使う。

$secretKey = 'foobar';

$data = 'hogehoge';
// 秘密鍵を用いてハッシュを生成
$hash_hmac = hash_hmac('sha512', $data, $secretKey);
// 秘密鍵を用いないでハッシュを生成
$hash = hash('sha512', $data);

var_dump($hash, $h);

↓

string(128) "ccfb4235adbcaa506f944e641b8f20ee31ce2f5df145c22d85155be382f3ef65e7e1e42bd82385b10e98019a630e3ed65d217f639541e9924426d59a96e9c9fd"
string(128) "2b7e36b16f8a849ef312f9ef5ff9b3f4281a8681d0657150899f1113a0eecfdbb4491da763159055b55e122e85281415b11897d268e124f9ef2b40457a63a465"

当然結果は異なる。

 

【PHP】すべての定義済み変数を配列で取得する。

めも。

$name = 'yamada';
$age = '20';
$email = 'noreply@example.com';

$vars = get_defined_vars();

var_dump($vars);

↓

array(3) {
  ["name"]=>
  string(6) "yamada"
  ["age"]=>
  string(2) "20"
  ["email"]=>
  string(19) "noreply@example.com"
}

そのまんまやね。

 

【PHP】指定した長さ、値で配列を埋める。

めも。

■配列長が10になるまで右側を0で埋める

$arr = array(1,2,3);

$arr = array_pad($arr, 10, 0);

var_dump($arr);

↓

array(10) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  [3]=>
  int(0)
  [4]=>
  int(0)
  [5]=>
  int(0)
  [6]=>
  int(0)
  [7]=>
  int(0)
  [8]=>
  int(0)
  [9]=>
  int(0)
}

■配列長が10になるまで左側を0で埋める

$arr = array(1,2,3);

$arr = array_pad($arr, -10, 0);

var_dump($arr);

↓

array(10) {
  [0]=>
  int(0)
  [1]=>
  int(0)
  [2]=>
  int(0)
  [3]=>
  int(0)
  [4]=>
  int(0)
  [5]=>
  int(0)
  [6]=>
  int(0)
  [7]=>
  int(1)
  [8]=>
  int(2)
  [9]=>
  int(3)
}

 

【enchant.js】画面描画領域の拡大を無効にする。

思わぬところで良い情報を見つけたのでメモ。

enchant.jsのアプリケーション描画領域は通常画面の最大幅に拡大されるが、拡大アルゴリズムがニアレストネイバーでないのが気に食わないため常々拡大禁止したいと思っていたところ、ちょっとした細工を施すことで案外簡単にできた。

bodyタグ内に下記のIDを持つdiv要素を記述してやるだけでよい。

<div id="enchant-stage"></div>

これは嬉しい大発見。