[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
今回から 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
コメント