2017-12-14 13 views
3

の間にアンダースコアを追加することができ、私はは、どのように私は2人の変数名

picture1_en 
picture2_en 
... 
picture1_de 
picture2_de 
... 
picture1_it 
picture2_it 

と呼ばれるいくつかのDBフィールドがはい、それは別の方法で実装されている可能性が、私は実装を変更することはできません。

私は今、「デ」または「エン」または「それ」
が含まれています$ LANGという変数を持って、私は値を印刷したい場合は、私はこの使用することができたとします

for($i=1; $i<=10; ++$i) 
    echo $r["picture$i_$lang"]; 

問題はPHPがアンダースコアを変数名の一部として解釈することです(例えば、 "$ i_"と解釈します)。アンダースコアを逃げようとしましたが、それほど狂気のようなことはありませんでした。

確かに、私は

echo $r["picture".$i."_".$lang]; 

を行うことができます。しかし、文字列リテラルとしてではなく、変数名の一部として「_」を解釈するためにPHPを強制する方法がある場合、私は思っていました。

+1

最後のコードスニペットとまったく同じです。 – ImprobabilityCast

+0

'$ i_'が未定義であることを通知します。また、ドット記法でキーに加わる最後の解決策には何も問題はありません。 – Scuzzy

+1

@ImprobabilityCastが言ったように...あなたの最後の例はうまくいきますが、 '$ r ['picture'。$ i '。$ lang];を' concat'ingするときに二重ではなく一重引用符を使用します引用符の中で何も解釈されないことを明確にしてください。 – IncredibleHat

答えて

5

あなたは(ダブルのみ引用符で囲まれた)文字列で変数名の境界を区切るために中括弧を使用することができます

$r["picture{$i}_{$lang}"]; 

または

$r["picture${i}_${lang}"]; 

http://php.net/manual/en/language.types.string.php

コンプレックス(カーリー)構文

この構文では、スカラ変数、配列要素または文字列表現を含むオブジェクトプロパティを含めることができます。式を文字列の外側に表示するのと同じ方法で書くだけで、{と}で囲みます。 {はエスケープできないので、この構文は$が{の直後にある場合にのみ認識されます。 {\ $を使用してリテラル{$。

+0

...そして、ブラケットに "$ lang"は必要ないことに気付いた。アンダースコア変数名の前に... – ZioBit

+0

本当にそれは次の '$ 'で始まる境界を発見するので、今のところ両方をラップする方が安全でしょう。 – Scuzzy

関連する問題