今回から PHP の標準関数の中で私が良く使うものを選んで、説明していきたいと思います。 
その最初として文字列の分解・結合を行う関数である explode 及び implode を取り上げます。 
■explode関数
先ずは explode 関数ですが以下の様な定義になっています。(PHP の正式な説明サイトより)
explode ( string $separator , string $string [, int $limit = PHP_INT_MAX ] ) : array
[説明]
  文字列の配列を返します。この配列の各要素は、 string を文字列 separator で区切った部分文字列となります。
[パラメータ ]
  $separator  :区切り文字列。
  $string     :入力文字列。
  $limit      :limit に正の値が指定された場合、返される配列には 最大 limit の要素が含まれ、
                その最後の要素には string の残りの部分が全て含まれます。
                limit パラメータが負の場合、 最後の -limit 個の要素を除く全ての構成要素が返されます。
                limit パラメータがゼロの場合は、1 を指定したものとみなされます。
それでは、簡単な文字列の分割について、以下にスクリプトを示します。 (尚、3行目の設定はWindowsコマンドプロンプトでの実行時に、コンソールへの出力を Shift-JIS にする為のものです)
<?php /* f1-explode.php */
//  Windowsコマンドプロンプトで[XAMPP]のPHPで表示を Shift-JIS にする為の設定
ob_start(function($buf){ return mb_convert_encoding($buf, 'SJIS', 'UTF-8'); });
//  分割する文字列
$str = "東京,名古屋,京都,大阪";
//  分割処理
$arr = explode(",", $str);
//  配列の内容表示
print_r($arr);
</html>
これをWindowsコマンドプロンプトで実行すると以下の表示になります。
C:\xampp\htdocs\_test>php f1-explode.php
Array
(
    [0] => 東京
    [1] => 名古屋
    [2] => 京都
    [3] => 大阪
)
 
変数「$arr」に指標「0」から順にカンマで分割された文字列が設定されています。 
それでは分割対象の文字列にカンマ(,)が無い場合と、関数の第3引数の「$limit」に指定を行う場合について例を示します。
<?php /* f1-explode-2.php */
//  Windowsコマンドプロンプトで[XAMPP]のPHPで表示を Shift-JIS にする為の設定
ob_start(function($buf){ return mb_convert_encoding($buf, 'SJIS', 'UTF-8'); });
//  分割する文字列(カンマが無い)
$str = "東京名古屋京都大阪";
//  分割処理
$arr = explode(",", $str);
//  配列の内容表示
print_r($arr);
//  分割する文字列
$str = "東京,名古屋,京都,大阪";
//  分割処理
$arr = explode(",", $str, 2);   //  limit:2 を設定
//  配列の内容表示
print_r($arr);
</html>
これをWindowsコマンドプロンプトで実行すると以下の表示になります。
C:\xampp\htdocs\_test>php f1-explode-2.php
Array
(
    [0] => 東京名古屋京都大阪
)
Array
(
    [0] => 東京
    [1] => 名古屋,京都,大阪
) 
分割文字列の中にカンマが無い場合は配列の指標「0」に分割指定文字列そのものが設定されます。 
(区切り文字列に分割文字列に存在しないものを指定した場合や、NULL文字列でも同様となります。) 
また、「$limit」が分割文字列のカンマの数より小さい場合は配列の指標「$limit - 1」の要素に残りの文字列が設定されます。 
■implode関数
implode 関数ですが以下の様な定義になっています。
implode ( string $glue , array $pieces ) : string [説明] 配列の要素を glue 文字列で連結した文字列を返します。 [パラメータ ] $glue :連結する文字列。 $pieces :連結したい文字列の配列。
以下にimplode 関数を使用した例のスクリプトを示します。
<?php /* f1-implode.php */
//  Windowsコマンドプロンプトで[XAMPP]のPHPで表示を Shift-JIS にする為の設定
ob_start(function($buf){ return mb_convert_encoding($buf, 'SJIS', 'UTF-8'); });
//  連結する配列
$arr = array("東京", "名古屋", "京都", "大阪");
//  連結処理(カンマで連結)
$str = implode(",", $arr);
//  文字列の内容表示
echo "カンマで連結    [" . print_r($str, true) . "]\n";
//  連結処理(長い文字列で連結)
$str = implode("--", $arr);
//  文字列の内容表示
echo "長い文字列で連結[" . print_r($str, true) . "]\n";
//  連結処理(空白文字列で連結)
$str = implode("", $arr);
//  文字列の内容表示
echo "空白文字列で連結[" . print_r($str, true) . "]\n";
//  空の配列
$arr = array();
//  連結処理(カンマで連結)
$str = implode(",", $arr);
//  文字列の内容表示
echo "空の配列を連結  [" . print_r($str, true) . "]\n";
?>
これをWindowsコマンドプロンプトで実行すると以下の表示になります。
C:\xampp\htdocs\_test>php f1-implode.php カンマで連結 [東京,名古屋,京都,大阪] 長い文字列で連結[東京--名古屋--京都--大阪] 空白文字列で連結[東京名古屋京都大阪] 空の配列を連結 []
ここまでは、単に関数のテストを行った感じですので、これらを利用した関数のスクリプトで示します。 
■explode, implode関数を使った関数の例
大した関数ではないのですが、日付チェック用の関数を作ってみました。 
日付が正しければ、日付文字列を返し、エラーの場合は false を返す様になっています。
<?php /* f1-sample.php */
//  Windowsコマンドプロンプトで[XAMPP]のPHPで表示を Shift-JIS にする為の設定
ob_start(function($buf){ return mb_convert_encoding($buf, 'SJIS', 'UTF-8'); });
// =====
//  日付チェック
// =====
//  $date string   :日付を表す文字列
//  [返り値]       :日付OKの場合は日付文字列で返し、NGの場合は false を返す
// =====
function ChkDate($_date) {
    //  ハイフン("-")をスラッシュ("/")に変換
    $date = str_replace("-", "/", $_date);
    //  年月日を分割
    $arr = explode("/", $date);
    //  Y/m/d 形式??
    if (isset($arr[0]) == true && isset($arr[1]) == true && isset($arr[2]) == true) {
        //  intに変換して "Y-n-j" 形式にする
        $intYY = intval($arr[0]);
        $intMM = intval($arr[1]);
        $intDD = intval($arr[2]);
        //  日付チェック
        if (checkdate($intMM, $intDD, $intYY) == true) {
            //  日付OKの場合[Y/n/j]書式で返す
            return implode("/", $arr);
            //以下の処理の方がいいかもしれません
            //$strDate = "{$intYY}-{$intMM}-{$intDD}";
            //return date("Y/n/j", strtotime($strDate));
        }
    }
    //  エラーの場合は[false]を返す
    return false;
}
//  [ChkDate]を使う関数
function ExcChkDate($strDate) {
    $ret = ChkDate($strDate);
    if ($ret === false) {
        echo $strDate."...error\n";
    } else {
        echo $strDate." => ".$ret."...OK\n";
    }
}
//  OKの日付
ExcChkDate("2020/12/01");
//  NGの日付
ExcChkDate("2019/02/29");
//  書式NGの日付
ExcChkDate("201902/29");
//  書式NGの日付
ExcChkDate("/02/29");
?>
これをWindowsコマンドプロンプトで実行すると以下の表示になります。
C:\xampp\htdocs\_test>php f1-sample.php 2020/12/01 => 2020/12/01...OK 2019/02/29...error 201902/29...error /02/29...error
 
  
コメント