1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

(PHP)文字列内で変数や配列の値を使う方法をまとめた

Posted at

とりあえず結果だけ教えろな方はこちら

変数

$money = '金';

echo '同情するなら$moneyをくれ';  // ① 
// 同情するなら$moneyをくれ

echo '同情するなら' . $money . 'をくれ'; // ② 文字列結合演算子 .
// 同情するなら金をくれ

echo '同情するなら{$money}をくれ'; // ③ 
// 同情するなら{$money}をくれ

echo "同情するなら$moneyをくれ"; // ④ 
// エラー

echo "同情するなら$money をくれ"; // ⑤ 
// 同情するなら金 をくれ

echo "同情するなら{$money}をくれ"; // ⑥ ダブルクォーテーション "" + 波括弧{}
// 同情するなら金をくれ

正確に表示されているのは

② 文字列結合演算子 . で文字列と変数を連結
⑥ ダブルクォーテーション「"」で括った文字列の中に、波括弧{}で括った変数名を埋め込む

場合のみ。

なお、⑤でも表示できるが、どこまでが変数名か明確にするために半角空白でスペースを作っているので、echoで文字列を表示すると不自然な空白が生まれてしまっている。

配列(キー名なし)

$money = ['金'];

echo '同情するなら$money[0]をくれ';  // ① 
// 同情するなら$money[0]をくれ

echo '同情するなら' . $money[0] . 'をくれ'; // ② 文字列結合演算子 .
// 同情するなら金をくれ

echo '同情するなら{$money[0]}をくれ'; // ③ 
// 同情するなら{$money[0]}をくれ

echo "同情するなら$money[0]をくれ"; // ④ ダブルクォーテーション
// 同情するなら金をくれ

echo "同情するなら$money[0] をくれ"; // ⑤ 
// 同情するなら金 をくれ

echo "同情するなら{$money[0]}をくれ"; // ⑥ ダブルクォーテーション "" + 波括弧{}
// 同情するなら金をくれ

変数同様②⑥はOK。

変数との違いは、④の場合、配列はうまく表示される。
閉じ角括弧 ] が配列添字の終端を表すため(以下マニュアル から抜粋)

同様に、配列添字とオブジェクトのプロパティをパースすることも可能です。 配列添字の場合、閉じ角括弧 (]) は添字の終りを意味します。 シンプルな変数の場合と同じ規則が、オブジェクトのプロパティに対しても適用されます。

配列(キー名あり)

$arr = ['money' => '金'];

echo '同情するなら$arr['money']をくれ'; // ① 
// エラー

echo '同情するなら' . $arr['money'] . 'をくれ'; // ② 文字列結合演算子 .
// 同情するなら金をくれ

echo '同情するなら{$arr['money']}をくれ'; // ③ 
// エラー

echo "同情するなら$arr['money']をくれ"; // ④ 
// エラー

echo "同情するなら$arr['money'] をくれ"; // ⑤ 
// エラー

echo "同情するなら{$arr['money']}をくれ"; // ⑥ ダブルクォーテーション "" + 波括弧{}
// 同情するなら金をくれ

キー名なしの場合と異なり、④がエラーになる。

実は文字列内で、キー名を指定して配列の要素にアクセスする場合、 'キー名' のシングルクォーテーションを除く必要がある

echo "同情するなら$arr[money]をくれ"; // ④' シングルクォーテーション「'」を削除
// 同情するなら金をくれ

これで④が正しく表示される。

結果

文字列内で変数や配列の値を使いたい場合は以下のとおり

// 変数
$money = '金';
echo '同情するなら' . $money . 'をくれ'; // 文字列結合演算子 .
echo "同情するなら{$money}をくれ";  //  ダブルクォーテーション "" + 波括弧{}

// 配列 キーなし
$money = ['金'];
echo '同情するなら' . $money[0] . 'をくれ';  // 文字列結合演算子 .
echo "同情するなら$money[0]をくれ"; // ダブルクォーテーション
echo "同情するなら{$money[0]}をくれ"; //  ダブルクォーテーション "" + 波括弧{}

// 配列 キーあり
$arr = ['money' => '金'];
echo '同情するなら' . $arr['money'] . 'をくれ';  // 文字列結合演算子 .
echo "同情するなら{$arr['money']}をくれ";  //  ダブルクォーテーション "" + 波括弧{}
echo "同情するなら$arr[money]をくれ"; // キー名のシングルクォーテーション「'」を削除

// 出力結果(全て)
// 同情するなら金をくれ

結論として

  • 文字列結合演算子 .
  • ダブルクォーテーション "" + 波括弧{}

の二つなら、どの場合でも変数と配列を正しく展開できるので、どちらかを使えばよい!

なお、シングルクォーテーションの方が処理速度早いとか、ダブルクォーテーションに変数展開した方がコードが読みやすいとかそれぞれメリデリありますが、今回はその辺触れません。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?