[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.文字の位置を調べる。文字列内の文字検索
$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」についても
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メニューへ戻る