今回から 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
コメント