[PHP]基礎・文字列






トップページへ

間違いのないように記述していますが、ミスがありましたらご容赦下さい。

 

Q.文字列の数字の足し算、引き算は?

A.一度intvalで整数に変換します。

使用例

$nin_kei = intval($value[2])+1;

 

 

Q. 文字列を表示する時はダブルクォーテーションか?シングルクォーテーションか?

A. https://qiita.com/bitcoinjpnnet/items/64458299eaeefbacab44


(追記)

改行コード(\nなど)を扱う時は「ダブルクォーテーション」で。

情報元 [PHP(楽天市場で探すamazonで探す)] 文字列を改行コードで分割して配列にする


・パターンA

文字列の中にダブルクォーテーション( ” )がある場合→シングルクォーテーション( ‘ )で囲むとダブルクォーテーション( ” )は残る

文字列の中にシングルクォーテーション( ‘ )がある場合→ダブルクォーテーション( ” )で囲むとシングルクォーテーション( ‘ )は残る

 

・パターンB

変数を含む文章はダブルクォーテーションで囲むと変数とともに文字列が表示される(変数展開)

とくにHTMLとしてファイルに出力する場合は注意が必要。

<?php
$hobby = 'PC';
echo "変数展開できる<BR>";
echo "趣味は{$hobby}です";
echo "<BR>";

$hobby = 'スマホ';
echo "変数展開できない<BR>";
echo '趣味は{$hobby}です';
echo "<BR>";

//ただし.$hobby.のように結合演算子ピリオドを併用すると'や"を気にしなくて良い
echo "変数展開 シングル<BR>";
echo '趣味は'.$hobby.'です';
echo "<BR>";
echo "変数展開 ダブル<BR>";
echo "趣味は".$hobby."です";
?>

結合演算子ピリオドについて

文字列演算子

https://www.php.net/manual/ja/language.operators.string.php

 

変数展開するHTML文での例

$honbun = "<td id='jichitai{$i}'>$jichitai_s</td>"."\n";

実行すると

<td id=’jichitai2′><a href=’https://www.pref.okayama.jp/page/697878.html’>岡山県</a>

 

HTMLなどで最終的にはダブルクォーテーションで出したい場合

$honbun_last = str_replace("'",'"', $honbun);

のように str_replace で一気に置換する方法もあります。

 

 

・パターンC

ただ単に文字を出力(表示)する場合は、シングルクォーテーションの方が早い

理由: シングルクォーテーションはパターンBのような変数展開をしないから

 

・パターンD

Q.HTML文として出力する場合で改行したい時
A.”\n”を使う。(システム上\になっていますが、実際は円マークです)

間違った例と実行例(\nが文字列として表示される)

$honbun .= $combo_mk.’\n’;
</option>\n</select>

正しい例と実行例(改行される)
$honbun .= $combo_mk.”\n”;
</option>
</select>

 

 

 

Q.変数と文字列を{}でつないで(結合して)表示

A. 文字列演算子の公式のUser Contributed Notesより

例 {$xyz}file.txt

変数 $xyz の中身の文字列とfile.txt とを結合できるので、afile.txt, bfile.txtなど任意に変更できます。また、

例 ”$xyz file.txt”

のように変数と文字列の間に半角空白(スペース)があれば $xyz は変数とみなされますが、空白がないとみなされません。そういった場合に{}を使って {$xyz}file.txt と定義すれば、空白は不要です。

ただし、echo文で使用する場合は “”で囲む必要があり、”で囲むとエラーになるそうです(User Contributed Notesより)

 

 

Q. echoでピリオド( . ) とカンマ( , )の出力の違い

A. https://qiita.com/trashtoy/items/5c76f3cd8cb636ac3c72

結論:ピリオドは文字列を結合しながら出力するが、なにもしないカンマの方がメモリ消費が少ない。

<?php
echo 'ピリオドの場合<BR>';
echo '山田'.'ケン'.'男';
echo '<BR>';
echo 'カンマの場合<BR>';
echo '山田','ケン','男';
echo '<BR>';
echo 'みためは同じ結果ですが<BR>';
echo 'ピリオドは結合演算子なので結合しながら出力。しかし<BR>';
echo 'echo内で使う場合、カンマはそのままの出力なので、カンマの方がメモリ消費が少ない';
?>

echo以外でカンマを使うとエラーになりやすいので、 通常は. (ピリオド)を使っています

 

また、ワーク領域に変数の値を次々と結合(代入結合)しながら改行する場合は

$se_list = “”;

foreach {

$se_list .= $days;

$office_list .= $hosoku;

}

となり、ここでのポイントは「.=」。

$se_listには$daysの値が、 $office_listには $hosokuの値が、追加結合されていきます。

 

また、HTMLタグ内で添え字にする例(名称の重複回避)として

<td id="name$i" >$kaihatsu</td>

の場合は name$i としても「私の場合は」支障はありませんでした。

結果

<td id=”name1″ >ジオニック社</td>

<td id=”name2″ >ジオニック社</td>

 

Q. 改行を出力したい

A.

<?php
echo "\n";
?>

変数展開と同様にダブルクォーテーションで囲む必要があり、

(※エンマークはパソコン上では¥ですが、Web上では \ となってしまいます)

<?php
echo '\n';
?>

とシングルクォーテーションで囲むとそのまま「\n」と表示されてしまう。

https://qiita.com/sola-msr/items/0814c4470dcbbd1f5ec3

 

★個人的に、HTML出力の場合

EOM;
echo "\n";

EOM;

のあとは、改行の「echo “\n”;」を出力して改行する。ただし「1行で出力したい場合」は除く。

 

Q.エンマーク(¥)を出力したい

A. 下記のサンプルを実施すると

<?php
$nedan = 900;

 
echo <<<EOM
価格 $nedan
EOM;
?>

結果

価格 900

となります。そこでエンマークをつけたいと思ったので

<?php
$nedan = 900;

echo <<<EOM
価格 \$nedan
EOM;
?>

(※エンマークはパソコン上では¥ですが、Web上では \ となってしまいます)

すると結果は

価格 $nedan

となってしまいました。そこで、エンマーク( \ )を二つにしたら

<?php
$nedan = 900;

echo <<<EOM
価格 \\$nedan
EOM;
?>

結果

となり、ブラウザ上ではエンマーク(¥)つきの価格になりました。

 

Q.文字列の除去は?文字の抜き出し

A. trimなど

https://www.php.net/manual/ja/function.trim.php

$koumoku = $value[0]; の結果 '飲食店'

$koumoku = trim($value[0], "'"); の結果 飲食店

※シングルコーテーションのみ除去をした

 

マルチバイト文字は mb_substr

(通常は substr

 

関連事項

文字列置換:str_replace

 

$ability の中身が EXAM の場合、

mb_substr($ability, 0, 3) の結果 EXA

mb_substr($ability, 1, 3) の結果 XAM

 

$ability の中身が RGシステム の場合、

mb_substr($ability, 0, 3) の結果 RGシ

mb_substr($ability, 1, 3) の結果 Gシス

 

$ability の中身が 不沈 の場合、

mb_substr($ability, 0, 3) の結果 不沈

mb_substr($ability, 1, 3) の結果 沈

 

 

Q.文字列の長さ、文字長は?

A.strlen

 

 

Q.文字の位置を調べる。文字列内の文字検索

A. strpos、大小区別しないstripos など

$pos = strpos(__FILE__, "kitai");
if ($pos === false){
    $kitai = '<span style="font-size:15pt; color:#cc0033;">'.$kitai.'</span>';
}else{
    $kitai = $kitai;
}

このサンプルでは「自分自身のファイル名に文字列 kitai が含まれるかどうか?」という事例です。

公式に明記されていますが

// === を使用していることに注目しましょう。単純に == を使ったのでは
// 期待通りに動作しません。なぜなら ‘a’ が 0 番目 (最初) の文字だからです。
if ($pos === false) {

 

// !== 演算子も使用可能です。ここで != を使っても期待通りに動作しません。
// なぜなら ‘a’ が 0 番目の文字だからです。(0 != false) を評価すると
// false になってしまいます。
if ($pos !== false) {

※定数 __FILE__ について→公式

 

※参考までに(===, !==を試す前なので、該当しない可能性があります)

検索文字の先頭に / が入ると、実行結果が異なる場合がありました。私は「先頭は / なし」の方法を取りました

悪い例

strpos($img_link, ‘/w-cont’)

良い例

strpos($img_link, ‘w-cont’)

 

※参考

文字列が最後に見つかった場所→strrpos、大小を区別しない場合は strripos

 

 

Q.printf と echo の違いは?

A. 下記の結果はいずれも同じでした。

printf(‘<option value=”%s”>%s</option>’, $syo, $syo_name);
echo ‘<option value=”‘.$syo.'”>’.$syo_name.'</option>’;

printf では %s や %d のようにフォーマット済みの文字列として出力できるのが違いと思われます。

公式

printf パラメータであるフォーマット文字列である「%sや%d」についても

echo

 

Q.処理中に変数名を変える場合

A. あくまでも一例です

$b = "1";
$c = "n".$b;

foreach ($file as $value) {

  printf("%d<br>", count($value));

 
 list($n0,$n1,$n2,$n3,$n4,$n5,$n6,$n7,$n8,$n9,$n10,$n11,$n12,$n13,$n14,$n15,$n16,$n17,$n18,$n19,$n20,$n21,$n22,$n23,$n24,$n25,$n26,$n27,$n28,$n29,$n30,$n31) = $value;
    
  printf("%s<br>", ${$c});
}

変数n1に入っている値を出力したい場合で、変数名の一部を変更するとして

$b = “1”;

$c = “n”.$b;

とすることで、$c の中身は文字列 “n1” になっています。そこで ${$c} とすると

printf(“%s<br>”, ${$c});

の ${$c} は ${n1} となり

printf(“%s<br>”, $n1);

と固定した場合と同じになるそうです。

 

参考サイト様

https://qiita.com/h-ueno2/items/892b34ae744be3563c51

ちなみに count($value) は 配列 $value の配列数を表示しています。公式

 

 

 

その他

※変数に「- (ハイフン)」は使用不可

 

PHPメニューへ戻る

 






関連記事
[PHP]基礎・if

[PHP]超初心者がWindowsで動作テストするために拝見したサイト様リンク集