MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
PHPの基礎 - 文字列のソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
PHPの基礎 - 文字列
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == PHPでは複数のデータ型が存在するが、文字の集合を表すために使用されるデータ型が文字列である。<br> ここでは、文字列の取り扱いを記載する。<br> <br><br> == 文字列リテラル == 文字列を記述する場合、文字の集合をシングルクオーテーション<code>'</code>またはダブルクオーテーション<code>"</code>で囲む。<br> なお、<code><nowiki>''</nowiki></code>で囲む場合と<code>""</code>で囲む場合では、データの扱いが異なる。(詳細は、次のセクションに記載する)<br> '文字列' "文字列" <br> 複数行に渡る文字列を作成するには、ヒアドキュメントを使用することもできる。<br> ヒアドキュメントは、<<< <ID名>で始まり<ID名>で終わる間に記述する。ID名は、任意の文字列が指定できる。<br> また、ヒアドキュメントでは、シングルクオーテーション<code>'</code>、ダブルクオーテーション<code>"</code>、空白も文字として扱われる。<br> <<< ID 文字列1 文字列2 文字列3 ID <br> 以下の例では、ID名をDocumentとしている。<br> <syntaxhighlight lang="php"> <<< Document こんにちは。<br /> お元気ですか? Document </syntaxhighlight> <br><br> == 文字列の連結 == ==== ドット演算子 (.) ==== 文字列と他の文字列を連結して新しい文字列を作成するには、<code>.</code>を使用する。<br> 単純な文字列結合には、<code>.</code>や<code>.=</code>が理解しやすい。<br> '文字列1'.'文字列2' <br> 以下の例では、2つの文字列を連結して出力している。<br> <syntaxhighlight lang="php"> print 'こんにちは。'.'お元気ですか?'; $name = '佐藤'; print $name.'さん。こんにちは。'; </syntaxhighlight> <br> また、連結した文字列を変数に格納することもできる。<br> <syntaxhighlight lang="php"> $name = '佐藤' . 'さん'; </syntaxhighlight> <br> ==== 複合代入演算子 (.=) ==== 単純な文字列結合には、<code>.</code>や<code>.=</code>が理解しやすい。<br> <syntaxhighlight lang="php"> $str = "Hello"; $str .= " World"; // "Hello World" </syntaxhighlight> <br> ==== ダブルクォート内での変数展開 ==== 変数を文字列に埋め込む場合は変数展開がよい。<br> <syntaxhighlight lang="php"> $name = "World"; $greeting = "Hello $name"; // "Hello World" </syntaxhighlight> <br> ==== 中括弧を使用した変数展開 ==== 変数を文字列に埋め込む場合は変数展開がよい。<br> <syntaxhighlight lang="php"> $name = "World"; $greeting = "Hello {$name}"; // "Hello World" </syntaxhighlight> <br> ==== sprintf関数の使用 ==== フォーマットを指定する場合はsprintfがよい。<br> <syntaxhighlight lang="php"> $name = "World"; $greeting = sprintf("Hello %s", $name); // "Hello World" </syntaxhighlight> <br> ==== implode関数 (配列の要素を結合) ==== 配列の要素を結合する場合は、<code>implode</code>関数を使用する。<br> <syntaxhighlight lang="php"> $words = ["Hello", "World"]; $greeting = implode(" ", $words); // "Hello World" </syntaxhighlight> <br><br> == 文字列の出力(echo, print) == 文字列を出力するには、<code>echo</code>と<code>print</code>が存在する。<br> <br> <code>echo</code>の書式は、以下の通りである。<br> echo "" void echo(string $arg1 [, string $... ]) <br> <code>echo</code>は引数に指定した文字列を出力する。<br> 複数の文字列を続けて出力する場合、カンマ<code>,</code>で区切って文字列を指定する。<br> <syntaxhighlight lang="php"> echo 'こんにちは'; echo '出身地:', '東京都'; </syntaxhighlight> <br> 厳密にいうと、<code>echo</code>は関数ではなくPHPの言語構造の1つである。<br> そのため、引数を括弧で括る必要はなく、関数のように括弧で括って記述することもできる。<br> ただし、複数の文字列を引数に指定する場合、括弧で括らない方がよい。<br> <syntaxhighlight lang="php"> echo('こんにちは'); </syntaxhighlight> <br> <code>print</code>の書式は、以下の通りである。 print "" int print(string $arg) <br> <code>print</code>は、引数に指定した文字列を出力する。<code>echo</code>とは異なり、複数の引数を指定できない。<br> また、戻り値として常に1を返す。<br> <syntaxhighlight lang="php"> print 'こんにちは'; </syntaxhighlight> <br> <code>print</code>も<code>echo</code>と同様、関数ではなくPHPの言語構造の1つである。<br> そのため、引数を括弧で括る必要はなく、関数のように括弧で括って記述することもできる。<br> <syntaxhighlight lang="php"> print('こんにちは'); </syntaxhighlight> <br><br> == エスケープシーケンス == 文字列として入力できない特殊な文字(改行文字等)が存在する。<br> <br> このような特殊な文字を入力するために、\記号 + 1文字等を使用して、特殊文字等を記述することができる。<br> このような特殊な記述方法をエスケープシーケンスと呼ぶ。<br> <br> エスケープシーケンスとして用意されているものには、以下のようなものがある。<br> ¥n 改行 ¥r キャリッジリターン ¥t タブ ¥¥ ¥文字 ¥$ $文字 ¥( 左括弧 ¥) 右括弧 ¥[ 左括弧 ¥] 右括弧 ¥' シングルクオーテーション ¥" ダブルクオーテーション ¥nnn 8 進数表記 ¥xnn 16 進数表記 <br> エスケープシーケンスは、ダブルクオーテーションで囲まれた文字列の場合にのみ意味を持つ。<br> 例えば、以下のように使用する。<br> <syntaxhighlight lang="php"> print "こんにちは¥n"; print "名前は¥"伊藤¥"です"; // ダブルクオーテーションで囲まれた文字列の中で"を出力する場合 </syntaxhighlight> <br> また、ダブルクオーテーションで囲まれた文字列の中で¥文字を出力する場合、<code>¥¥</code>と記述する。<br> <br> <u>※注意</u><br> <u>シングルクオーテーションで囲まれた文字列の中でも、以下の2つだけはエスケープシーケンスとして扱われる。</u><br> ¥' シングルクオーテーション ¥¥ ¥文字 <br> <syntaxhighlight lang="php"> print '出身地は¥'大阪¥'です'; </syntaxhighlight> <br><br> == 文字列の抽出 == mb_substr関数は、日本語等のマルチバイト文字列を安全に扱うための関数である。<br> <br> mb_substrの主な使用パターンを以下に示す。<br> * 基本的な文字列の切り出し * 末尾からの文字列取得 * 途中からの文字列取得 * エンコーディングを指定した使用方法 <br> <u>※注意</u><br> * 必要に応じて適切な文字エンコーディングを指定する。 * 文字列の長さを確認する場合は、mb_strlen関数を使用する。 * 負の位置指定も可能だが、慎重に使用する。 <br> ==== 抽出の基本 ==== <syntaxhighlight lang="php"> $text = "こんにちは世界"; $substr = mb_substr($text, 0, 3); // "こんに" が取得される echo $substr . "\n"; </syntaxhighlight> <br> ==== 負の開始位置を使用 (末尾から数える) ==== <syntaxhighlight lang="php"> $text = "プログラミング"; $substr = mb_substr($text, -3); // "ミング"が取得される echo $substr . "\n"; </syntaxhighlight> <br> ==== 文字列の途中から指定文字数を取得 ==== <syntaxhighlight lang="php"> $text = "私はPHPが好きです"; $substr = mb_substr($text, 2, 3); // "PHP" が取得される echo $substr . "\n"; </syntaxhighlight> <br> ==== 文字エンコーディングの指定 ==== <syntaxhighlight lang="php"> $text = "안녕하세요"; // 韓国語 $substr = mb_substr($text, 0, 2, 'UTF-8'); // "안녕"が取得される echo $substr . "\n"; </syntaxhighlight> <br> ==== 長い文字列を省略して表示 (例: ブログの要約等) ==== <syntaxhighlight lang="php"> function createExcerpt($text, $length = 100) { if (mb_strlen($text) > $length) { return mb_substr($text, 0, $length) . '...'; } return $text; } $longText = "これは非常に長い文章である。途中で切られて...という形で表示される。"; echo createExcerpt($longText, 10); // "これは非常に長..." が表示される </syntaxhighlight> <br><br> == 全角・半角 == 全角・半角が混ざった文字列を正確にカウントする場合、いくつかの方法が存在する。<br> 必ず、エンコーディング (UTF-8等) を指定する必要があることに注意する。<br> <br> また、全角・半角を区別してカウントする場合は、正規表現を使用することができる。<br> <br> ==== mb_strlen関数の使用 ==== これは、簡便で高速な方法である。<br> <syntaxhighlight lang="php"> $str = "1 あ イ"; $count1 = mb_strlen($str, 'UTF-8'); echo "mb_strlen(): " . $count1 . "\n"; // 結果: 5 </syntaxhighlight> <br> ==== preg_match_all関数を使用して文字単位でカウント ==== より複雑なパターンマッチングが必要な場合に使用する。<br> <syntaxhighlight lang="php"> $str = "1 あ イ"; // preg_match_all関数の第3引数は、参照渡しのパラメータで、以下に示すような特徴がある。 // 関数の実行結果がこの変数に格納される // 変数を事前に初期化する必要はない // 関数内で自動的に配列として作成される $count2 = preg_match_all('/./u', $str, $matches); echo "preg_match_all(): " . $count2 . "\n"; // 結果: 5 </syntaxhighlight> <br> ==== 配列に分解してカウント ==== <syntaxhighlight lang="php"> $str = "1 あ イ"; $array = preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY); $count3 = count($array); echo "preg_split(): " . $count3 . "\n"; // 結果: 5 </syntaxhighlight> <br> ==== mb_str_split関数の使用 (PHP 7.4以降) ==== 文字列を配列に分解できるため、文字ごとの処理が必要な場合に便利である。<br> <syntaxhighlight lang="php"> $str = "1 あ イ"; $array2 = mb_str_split($str); $count4 = count($array2); echo "mb_str_split(): " . $count4 . "\n"; // 結果: 5 </syntaxhighlight> <br> ==== 空白を除外してカウント ==== <syntaxhighlight lang="php"> $str = "1 あ イ"; $count_no_spaces = mb_strlen(str_replace(' ', '', $str), 'UTF-8'); echo "空白を除外: " . $count_no_spaces . "\n"; // 結果: 3 </syntaxhighlight> <br> ==== 文字種別ごとにカウント ==== <syntaxhighlight lang="php"> $str = "1 あ イ"; $zenkaku_count = preg_match_all('/[ぁ-んァ-ンー一-龠]/u', $str, $matches); $hankaku_count = preg_match_all('/[\x{FF01}-\x{FF5E}]/u', $str, $matches); $space_count = mb_substr_count($str, ' '); echo "全角文字数: " . $zenkaku_count . "\n"; // 結果: 1 echo "半角カナ数: " . $hankaku_count . "\n"; // 結果: 1 echo "空白文字数: " . $space_count . "\n"; // 結果: 2 </syntaxhighlight> <br><br> == 文字関数 == ==== 英字の判別(ctype_alpha関数, ctype_alnum関数) ==== <code>ctype_alpha</code>関数は、文字列に英字のみが含まれているかどうかを確認する。<br> boolean ctype_alpha(string text) 引数の文字列に英字だけが含まれているかどうかを確認します。 英字はa~z、A~Zである。 英字のみの文字列の場合はTRUE、英字以外が含まれている場合はFALSEを返す。 引数 text 調べる文字列 戻り値 文字列が全て英字である場合はTRUE、それ以外の場合はFALSEを返す。 <br> <code>ctype_alnum</code>関数は、英字と数字のみが含まれているかを確認する。<br> boolean ctype_alnum(string text) 引数の文字列に、英字と数字のみが含まれているかを確認する。 英字はa~z、A~Z、数字は0~9である。 英字と数字のみの文字列の場合はTRUE、英字と数字以外が含まれている場合はFALSEを返す。 引数 text 確認する文字列 戻り値 文字列が全て英字と数字である場合はTRUE、それ以外の場合はFALSEを返す。 <br> <syntaxhighlight lang="php"> <?php $input_data = $_GET['text1']; function dispKekka($str) { $kekka1 = ctype_alpha($str); $kekka2 = ctype_alnum($str); print('調べる文字列は'.$str.'です<br>'); if($kekka1 == TRUE) { print('文字列は英字だけが含まれています<br><br>'); } else { if($kekka2 == TRUE) { print('文字列は英字及び数字だけが含まれています<br><br>'); } else { print('文字列は英数字以外の文字が含まれています<br><br>'); } } } $str = 'abcdef'; dispKekka($str); $str = 'abc@def'; dispKekka($str); $str = 'abc654def'; dispKekka($str); ?> </syntaxhighlight> <br> ==== 数字の判別(ctype_digit関数) ==== <code>ctype_digit</code>関数は、文字列に数字のみが含まれているかを確認する。<br> boolean ctype_digit(string text) 文字列に数字だけが含まれているかを確認する。 数字のみの場合はTRUE、数字以外が含まれている場合はFALSEを返す。 引数 text 調べる文字列 戻り値 文字列が全て数字の場合はTRUE、それ以外の場合はFALSEを返す。 <br> <u>※注意</u><br> <u>小数点等が含まれている場合も<code>FALSE</code>となる。この関数では、全ての文字が0~9である必要がある。</u><br> <u>引数に指定した値が、数値または数値として有効な文字列かどうかを判別する場合は、</u><br> <u>数字または数値文字列の判別(<code>is_numeric</code>関数)セクションを参照すること。</u><br> <syntaxhighlight lang="php"> <?php function dispKekka($str) { $bRet = ctype_digit($str); print('調べる文字列は'.$str.'です<br>'); if($bRet) { print('文字列は数字だけが含まれています<br><br>'); } else { print('文字列は数字以外の文字が含まれています<br><br>'); } } $str = '01234'; dispKekka($str); $str = 'abc998'; dispKekka($str); $str = '123.45'; dispKekka($str); ?> </syntaxhighlight> <br> ==== 大文字・小文字の判別(ctype_upper関数, ctype_lower関数) ==== <code>ctype_upper</code>関数を使用して、文字列が全て大文字かどうかを確認する。<br> また、<code>ctype_lower</code>関数を使用して、全て小文字かどうかを確認する。<br> boolean ctype_upper(string text) 引数の文字列が大文字かどうかを確認する。 引数 text 調べる文字列 戻り値 引数の全ての文字が大文字の場合はTRUE、それ以外の場合はFALSEを返す。 英字以外の文字が含まれている場合はFALSEとなる。 例えば、数字が含まれている場合はFALSEが返る。 <br> boolean ctype_lower(string text) 引数の文字列が小文字かどうかを確認する。 引数 text 調べる文字列 戻り値 引数の全ての文字が小文字の場合はTRUE、それ以外の場合はFALSEを返す。 <br> <syntaxhighlight lang="php"> <?php function dispKekka($str) { $kekka1 = ctype_upper($str); $kekka2 = ctype_lower($str); print('調べる文字列は'.$str.'です<br>'); if($kekka1 == TRUE) { print('文字列は大文字だけです<br><br>'); } else { if($kekka2 == TRUE) { print('文字列は小文字だけです<br><br>'); } else { print('文字列は大文字小文字が混合しています<br><br>'); } } } $str = 'abc'; dispKekka($str); $str = 'ABC'; dispKekka($str); $str = 'abc89'; dispKekka($str); $str = 'ABC89'; dispKekka($str); ?> </syntaxhighlight> <br><br> {{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux |image=/resources/assets/MochiuLogo_Single_Blue.png }} __FORCETOC__ [[カテゴリ:Web]]
PHPの基礎 - 文字列
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse