PG WORKS

PHPやLinux(サーバー)などのノウハウや、便利なツールを紹介していきます。

【PHP】preg_match_allを使った正規表現の書き方

PHP正規表現を使うとき、「preg_match_all」をよく使います。
今回は、「preg_match_all」を使ったサンプルを記載していきたいと思います。

正規表現サンプル

<?php
  $buf = '<a href="sample.com"></a>';
  $ptn = "/href=\"(.*)\"/i";
  preg_match_all($ptn, $buf, $aryDatas);
  print_r($aryDatas);
?>

正規表現サンプルの実行結果

f:id:zen6a:20150909224551p:plain

「$aryDatas」配列の中に、正規表現で指定した内容が出力されます。「(.*)」で指定した部分は、配列番号の1番目「$aryDatas[1][0]」に格納されます。また、特定のタグ要素部分の値を取得したいときは、「(.*)」または「(.*?)」で取得できます。

「$buf」の要素が改行されているときは、上記の方法で取得ができないため、下記の方法で取得します。

正規表現サンプル(複数行のAタグを取得)

<?php
  $buf = '<a href="sample.com"></a>
  <br >
  <a href="sample2.com"></a>
  
  <a href="sample3.com"></a>';
  $ptn = "/href=\"(.*?)\"/is";
  preg_match_all($ptn, $buf, $aryDatas);
  print_r($aryDatas);
?>

正規表現サンプルの実行結果(複数行のAタグを取得)

f:id:zen6a:20150909225727p:plain

複数行のデータがある場合、正規表現の書き方を「$ptn = "/href=\"(.*?)\"/is";」に変更すると、取得が可能になります。

【PHP】strtotimeを使用した日付の加算減算方法

日付計算をするときに使用する「strtotime」を紹介します。

strtotimeを使ったサンプル

<?php
// 昨日/明日
strtotime("-1 day");
strtotime("+1 day");

// 一週間前/一週間後
strtotime("-1 week");
strtotime("+1 week");

// 一ヶ月前/一ヶ月後
strtotime("-1 month");
strtotime("+1 month");

// 一年前/一年後
strtotime("-1 year");
strtotime("+1 year");
?>

そのまま、出力すると「UNIX TIMESTAMP」形式の数値が表示されますので、「date」関数を使って日付に変換していきます。

date関数とstrtotimeを合わせて、日付を取得するサンプル

<?php
// 昨日/明日
date("Y-m-d", strtotime("-1 day"));
date("Y-m-d", strtotime("+1 day"));

// 一週間前/一週間後
date("Y-m-d", strtotime("-1 week"));
date("Y-m-d", strtotime("+1 week"));

// 一ヶ月前/一ヶ月後
date("Y-m-d", strtotime("-1 month"));
date("Y-m-d", strtotime("+1 month"));

// 一年前/一年後
date("Y-m-d", strtotime("-1 year"));
date("Y-m-d", strtotime("+1 year"));
?>

月単位で計算をする際には、下記のコードで処理する方が良さそうです。

一ヶ月前後を取得する際には下記のコード

<?php
// 一ヶ月前/一ヶ月後
date("Y-m-01", strtotime("-1 month"));
date("Y-m-01", strtotime("+1 month"));
?>

月末を取得するには、下記ので取得可能です。

月末を取得するサンプル

<?php
// 一ヶ月前の月末/一ヶ月後の月末
echo date('Y-m-t', strtotime(date('Y-m-01').'-1 month'));
echo date('Y-m-t', strtotime(date('Y-m-01').'+1 month'));

//当月の月末
echo date('Y-m-t');
?>

以上が個人的にもよく使う、「strtotime」関数の使用一覧となります。
他にもいろんな使い方ができますので、オススメな使い方などあれば、コメント欄に記述して頂けると幸いです。

2016年3月2日追記

strtotimeのように日付の加算減算ができる、Carbonの記事をアップしました。
zen6a.hateblo.jp

【jQuery】よく使うセレクタの指定方法

動的なページを作る際にお世話になるjQuery
私個人のメモも兼ねて、宣言部分とセレクタの書き方を、掲載していきたいと思います。

jQuery宣言部分

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script type="text/javascript">
  $(document).ready(function(){
    // ここに処理を書く
  });
</script>

jQuery.min.js」はGoogleDeveloperサイトから取得しています。
(https://developers.google.com/speed/libraries/?hl=ja)

「$(document).ready(function()」部分ですが、html終了タグが読み込まれたときに、上のjQueryの処理を実行させるそうです。
詳しい情報は、下記のサイトの質問が参考になります。

oshiete.goo.ne.jp

個人的によく使うセレクタ一覧

$("#id1")
※ID名「id1」を指定

$(".class1")
※CLASS名「class1」を指定

$(".class1,.class2")
※OR検索で複数指定するときは「,」をつける(例はクラス名で指定しました。)

$("#id"+"1")
※文字列を結合させて、id名を指定させる

$("[name=test1]")
※name名を指定

$("a[name=test1]")
※aタグのname名を指定

他も使うセレクタがあれば、こちらへ追記したいと思います。

よく使うjQueryのイベント判定は、下記の記事をご確認ください。
zen6a.hateblo.jp

【PHP】海外の日付を取得

海外の時間を取得して実行するプログラムを作っていたときがあったので、
引数で記号を入れると、その国の時間が取れるように関数化してみました。

海外の日付を取得するプログラム

<?php
function getDateCountry( $cy ) {
  switch( $cy ) {
    case "LA":
      $est = new DateTime('now',new DateTimeZone('America/Los_Angeles'));
    break;
    case "NY":
      $est = new DateTime('now',new DateTimeZone('America/New_York'));
    break;
    case "DU":
      $est = new DateTime('now',new DateTimeZone('Europe/Dublin'));
    break;
   }
   return $est->format("Y-m-d H:i:s");
}
?>

今回記載したサンプルでは、3つ分の都市の時間が取れますが、他の国の日付を取得したいときは「case」文で追加していく形になります。

めったに使うことはないかもしれませんが、省略して記述できるように最適化するのもいいですね。

【PHP】お手軽に日付チェックがしたい

※説明文と、日付チェックプログラムを一部変更しました。(2015年8月22日更新)

とりあえず、日付の形式だけあっているのかチェックしたいな~と思い、
下記の関数を作ってみました。

日付チェックプログラム

<?php
function is_fix_date( $date, $format="Y-m-d H:i:s" ) {  
  $tempDate = date( "Y/m/d/H/i/s", strtotime($date) );  
  $aryDate = explode( "/", $tempDate );  
  if ( mktime( $aryDate[3], $aryDate[4], $aryDate[5], $aryDate[1], $aryDate[2], $aryDate[0] ) == FALSE 
  || !checkdate($aryDate[2], $aryDate[3], $aryDate[1]) ) {  
    $fixedDate = NULL;
  } else {
    $fixedDate = date( $format, strtotime($date) );
  }
  return $fixedDate;  
}
?>

今回使う関数はこちら。

「mktime」と「checkdate」で日付チェックを行い、取得できなかった場合「NULL」を返すようにしてみました。

「mktime」のチェックだけだと、試しに「2015-04-31」と値を入れると「2015-05-01」と繰り越しされてしまうからです。

エラーなのか判定できないため、「checkdate」も追加しました。

あとがきてきなもの

毎週木曜日と休日は、運動してるから書くのが遅くなってしまった。。。