[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
今回から PHP の標準関数の中で私が良く使うものを選んで、説明していきたいと思います。
その最初として文字列の分解・結合を行う関数である explode 及び implode を取り上げます。
本の紹介では...
PHP8の基本構文から、クラス、DB連携、セキュリティ対策まで、しっかり習得。
PHPプログラミングの標準教科書『独習PHP』が、最新のPHP8に対応。
PHPでWebページ/アプリケーションを開発する際に必要な基礎的な知識、
PHPの基本構文から、クラス、データベース連携、セキュリティまで、詳細かつ丁寧に解説します。
...
■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 にする為のものです)
1 2 3 4 5 6 7 8 9 10 | <?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コマンドプロンプトで実行すると以下の表示になります。
1 2 3 4 5 6 7 8 9 | C:\xampp\htdocs\_test>php f1- explode .php Array ( [0] => 東京 [1] => 名古屋 [2] => 京都 [3] => 大阪 ) |
変数「$arr」に指標「0」から順にカンマで分割された文字列が設定されています。
それでは分割対象の文字列にカンマ(,)が無い場合と、関数の第3引数の「$limit」に指定を行う場合について例を示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?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コマンドプロンプトで実行すると以下の表示になります。
1 2 3 4 5 6 7 8 9 10 | 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 関数を使用した例のスクリプトを示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <?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コマンドプロンプトで実行すると以下の表示になります。
1 2 3 4 5 6 | C:\xampp\htdocs\_test>php f1-implode.php カンマで連結 [東京,名古屋,京都,大阪] 長い文字列で連結[東京--名古屋--京都--大阪] 空白文字列で連結[東京名古屋京都大阪] 空の配列を連結 [] |
ここまでは、単に関数のテストを行った感じですので、これらを利用した関数のスクリプトで示します。
■explode, implode関数を使った関数の例
大した関数ではないのですが、日付チェック用の関数を作ってみました。
日付が正しければ、日付文字列を返し、エラーの場合は false を返す様になっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | <?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コマンドプロンプトで実行すると以下の表示になります。
1 2 3 4 5 6 | 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 |
関連する記事
⇒PHP 標準関数その1・文字列の分割・結合を行う関数(explode, implode)について⇒PHP 標準関数その2・変数の存在チェック及び解除を行う関数(isset, unset)について
⇒PHP 標準関数その3・変数の整数型への変換を行う関数(intval)について
⇒PHP INIファイル(初期設定用)の読込について(parse_ini_file)
ショッピングサイト一通りを最初から自分で作ってみることで、PHPでのシステム開発を学べる入門書です。
コメント