PHP変数の書き方とは?

このQ&Aのポイント
  • PHP変数の書き方や使い方について詳しく教えてください。
  • 変数の名前を動的に生成する方法や可変変数について教えてください。
  • 配列の要素を変数名として使う方法についても教えてください。
回答を見る
  • ベストアンサー

PHP 変数の書き方

初歩的な質問で恐縮なのですが どなたか教えていただけますでしょうか。 変数の書き方で $a="banana"; $$a = 1; print $$a; とした場合にちゃんと出力結果は「1」と出るのですか プログラムの書き方として上記のように$$を続けて書くのは正しいのでしょうか。 例えば配列を使った場合 $a = array("banana"=>0); このbananaを変数名としたい場合 bananaをforeachなどで取り出し $keyとし $$key = 1; print $$key; この書き方はプログラムの書き方として正しいのでしょうか?他によいか書き方ある場合その書き方を教えていただければ幸いです。 よろしくお願い致します。

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
noname#223623
noname#223623
回答No.1

$$keyを$bananaとして解釈させたい。しかし$を続けるのは正しいのか、という疑問でいいんですかね。 $$keyが正しいかですが、少なくとも期待通りに動いている以上、間違いではないと思います。しかし場合によっては困ります。エラーは出ないかもしれませんが、期待通りに動くかはわかりません。 他の書き方として、${$key}と書いたほうがわかりやすいし、確実だと思います。詳しくは参考URLを読んで下さい。

参考URL:
http://www.php.net/manual/ja/language.variables.variable.php
xxxapexxx
質問者

お礼

ご丁寧な回答ありがとうござます。 可変変数というのですね名前がわかれば調べられると思います。 $($key) ,$[$key]までは試したのですが${$key}だったのですね。 ありがとうございました。 大変参考になりました。

関連するQ&A

  • phpのエラーが解決できません

    $food["1"]["item0"]="y"; $food["1"]["item1"]="bi"; $food["1"]["item2"]="1300"; $food["1"]["item3"]="20060630"; $food["2"]["item0"]="y"; $food["2"]["item1"]="bi"; $food["2"]["item2"]="1500"; $food["2"]["item3"]="20070630"; $e = "a"; if( $e = "a"){ foreach($food as $key1=>$array){ foreach($array as $key2=>$array2){ if ($food["$key1"]["item2"] <="1300") { unset( $food[$key1]); } } } } 上記のプログラムを書いてローカル環境で実行するとNotice Undefined offsetの警告が沢山 出ます。ググるなどして、未定義の変数などがある場合に出ると他のサイトで読んだのですが上記に特に未定義の 変数は無いように思うのですが・・。 (unsetをecho "hello";などに置き換えると警告は出ません) やりたい事は上記のような配列の集まりが数百個あり、 item2の値の数値により配列を消したりしたいのですが、警告を無くすにはどうしたらよいでしょうか。 (一時配列は1から順に増えていきます) phpを始めたばかりで解決方法を探しているのですがネット上では見つけられません・・。

    • ベストアンサー
    • PHP
  • 配列の要素(value)に、変数を格納するのはダメ??

    PHP5の環境で作業をしています。 $apple = "りんご"; $orange = "みかん"; $banana = "バナナ"; $array_test = array("$apple","$orange""$banana"); print_r($array_test); /*------------- 結果: Array ( [0] => りんご [1] => みかん [2] => バナナ ) -------------*/ すごく初歩的なことをお聞きしているかもしれませんが、 配列の要素に「変数」を入れるのはダメでしたでしょうか? 検索して探してみても、なかなか出てこないので…。 (検索の仕方が悪いだけでしょうか。) 意外に見つからないので、驚いています。 実際、上のコードで試すと、問題なく希望通りの結果を返してくれます。 でも、これは、作法的にはよろしくないのでしょうか?

    • ベストアンサー
    • PHP
  • [PHP]配列におけるインデックスの考え方

    $scores = [10, 50, 30, 20]と言った配列があるとします。 配列内の10の値を取りだそうとすれば print $scores[0]; とすればブラウザに10の値が表示されます。 というか、配列というのは、[0][1][2][3]…と数えるものだと思っていました。 今、array_fill()関数について学習しています。 $prices = array_fill(0, 5, 10); としてprint_rで出力すると Array ( [0] => 10 [1] => 10 [2] => 10 [3] => 10 [4] => 10 ) と自分で理解できる範囲の結果が表示されます。 ところが、 $prices = array_fill(-2, 5, 10); をprint_rで出力すると以下のように返ってきます。 Array ( [-2] => 10 [0] => 10 [1] => 10 [2] => 10 [3] => 10 ) 単純に考えると、以下のように返ってこないのはなぜなのでしょうか? Array ( [-2] => 10 [-1] => 10 [0] => 10 [1] => 10 [2] => 10 ) また $prices = array_fill(5, 5, 10); と記述すると、 Array ( [5] => 10 [6] => 10 [7] => 10 [8] => 10 [9] => 10 ) と返ってきます。 配列のインデックス、添字を名前や商品名にして連想配列が出来るのはわかります。 (1)マイナス値からはじめた場合、なぜ[-2][-1][0]…のように返ってこないのはなぜでしょうか? (2)配列の添え字、インデックスが、[5]ではじまり[6][7][9][10]…とすることに 何か意味があるのでしょうか? $prices = [10, 10, 10, 10, 10]のような記述があった場合、初学者には[0]からはじまっているからこそ array_spliceなどでキー名がわからずとも、配列を操作を容易にできるのではないかと思ってしまいます。 上記2点、配列内でのマイナス値の扱い方、配列の添字が[0]以外からはじまる理由がよくわかりません。 分かる方いらっしゃいましたら教えて下さい。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP 配列の添字に変数は使えない?

    phpで初歩的な質問ですが、foreachでループしてる間 配列にどんどん文字を入れたいと思います。 $i = 0 ; foreach($entry as $no){ $sort[\'$i\'] = \"hogehoge\" ; $i++; } イメージは↑こんな感じにしたいのですが、配列の添字に変数は 使えないようなことが書いてありました。 こういう動きをする場合にはどうすれば良いのでしょうか? ご教授よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 参照変数の親配列を取得

    データの多次元配列があって、値に応じて動的に関数を選択し 中身の値を引数で渡すみたいな感じの処理をしています ほとんどの処理は中身の値だけあれば事足りるのですが 稀にキー値を使いたい処理がでてきます 本当に稀なので引数にキー値も渡すようにするのは 無駄が多くなるように思うので避けたく できれば参照変数で渡される値から 親配列でのキー値を取得したいと思っています $arr2A=array('a'=>array('fnc'=>'A','あ','い','う'),'b'=>array('fnc'=>'B','か','き','く'),'c'=>array('fnc'=>'C','さ','し','す')); $arr2B=array('a'=>array('fnc'=>'A','あ','い','う'),'b'=>array('fnc'=>'B','か','き','く'),'c'=>array('fnc'=>'C','さ','し','す')); $arr2C=array('a'=>array('fnc'=>'A','あ','い','う'),'b'=>array('fnc'=>'B','か','き','く'),'c'=>array('fnc'=>'C','さ','し','す')); foreach($arr2A as $key=>$val){ $fncs[$val['fnc']]($val); } foreach($arr2B as $key=>$val){ $fncs[$val['fnc']]($val); } foreach($arr2C as $key=>$val){ $fncs[$val['fnc']]($val); } $fncs=array( A=>function(&$arr){ }, B=>function(&$arr){ }, C=>function(&$arr){ //ここで稀にキー値も使いたい }); 実際のコードはかなり長いので載せられませんが 要約すると上記のような感じの処理です まずどのデータ配列の集合から渡されたのかが明確ではありませんので indexOfなどでキー値を得るのというのが難しいです 現在は、その処理が必要なデータ行について処理前に 中身にキー値をあらかじめ入れてしまう というように対応しているので、一応解決はしているのですが もし参照変数から親配列を得る方法が あればと思い質問させていただきました ”そんなものはない”という回答も あきらめつくのでお願いします

    • ベストアンサー
    • PHP
  • php配列確認に関して

    $name = array( '0' => 'test', '1' => 'test1', '2' => 'test2', '3' => 'test4', '4' => array( '0' => 'e', '1' => 'r', '2' => 'y', '3' => 'i', ), ); foreach ($name as $key => $value) } print $value; } このうえの配列を確認したいのですが print $value;でやると 4がarrayとなってしまいます 4の中身を確認したいのですか foreachの下に何を書けばいいでしょうか?

    • ベストアンサー
    • PHP
  • 変数の構造について

    初歩的な質問ですみません。 以下のような変数はどんな構造になっているのでしょうか? 配列の中にハッシュが入っているのかと思っているのですが・・ $list = [ { id => '1', name => 'hoge' }, { id => '2', name => 'fuga' }, { id => '3', name => 'foo' } ]; 上記の$listにあるidを全て出力しようとして以下のようにしても 出力することができません。 foreach ($list) { print $_['id']; print '<br>'; } また「[]、{}」は何を意味するのでしょうか? 当方、PHPには詳しいのですがPerlは最近始めたばかりでよく理解できておりません。 お手数ですが、どなたかお分かりになる方いましたらご教授いただければと思います。

    • ベストアンサー
    • CGI
  • PHPコードの読解お願いいたします

    PHP初心者です。 環境→XAMPP1.7.0でアパッチなど一括ダウンロード OSはヴィスタ 以下コード中分からない点がありますので、ご指導よろしくお願いいたします。(細かい点は省略しています) なお●の部分が分からない点です。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <?php $city=array("東京""大阪""名古屋""神奈川") ?> <h2>出発地のご案内</h2> <form> <select name="city"> <?php foreach($city as $name=>$value){  ● print "<option value={$value}>{$value}</option> } ?> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ●・・foreach内の$nameと$valueの変数はそれぞれ何を表わしているのでしょうか。 私の教科書的理解で申しますと、$nameはキー用の変数を表わし、$valueは値用の変数を表すものだと思っております。 そこから考えると、$cityに格納されている”東京"、"大阪"、"名古屋"、"神奈川”それぞれの文字列はキー用の$nameに格納される、なら残った$valueには何が入るのでしょうか。 そもそもforeach($配列名 as $キー用の変数=>$値用の変数)という記載の仕方ができるのは、事前に配列にて 例えば$配列名=array("キー0"=>値0、"キー1"=>値1・・) といった記載がされている場合に有効なのではないかと思うのですが。 繰り返しますが、おそらく$cityに格納されているそれぞれの文字列がキー変数を表わす"$name"に代入されると思うのですが、それでは値用の変数$valueにはいったい何が格納されるといういうのでしょうか。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • phpでの変数の作り方をsmartyで実現する方法

    phpでの変数の作り方をsmartyで実現する方法を教えていただきたいです。 簡単な例ですが以下のような場合どうすれば実現できるでしょうか? $Out = array("Out_10"=>"test1","Out_20"=>"test2","Out_30"=>"test3"); $Status_Num = array("10","20","30"); $window->assign('Out',$Out); $window->assign('Status_Num',$Status_Num); [表示] {foreach from=$Status_Num item=Num} <!--ここが分かりません。。--> {/foreach} [実現したい事] phpであれば。。 <?php foreach($Status_Num as $Num):?> <a href=""><?php echo $Out['Out_'.$Num];?></a> <?php endforeach;?> 連想配列のvarを表示させたいのです。。 上記の形をsmartyで実現したいです。 エラー続きで困っています。 どなたか教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • phpで、配列の値が意図せず変わってしまいます。

    環境はphp4です。 for、もしくはforeachを使って配列の中身を変えたいと思っています。 $array1 = array(123csv, 456csv, 789csv); for($a = 0; $a <= count($array1) -1; $a++){ $array2[] = "a" . $array1[$a]; } echo $array1[0]; echo $array2[0]; 上記の出力結果がなぜか異なり困っています。 array1[0]は「123csv」、 array2[0]は「a113csv」、もしくは「a12300v」 などとなってしまいます。 先頭に「a」を付加しない場合も「113csv」、もしくは「12300v」という結果です。 ちなみに$array1はexplodeを使って空白文字をを分割して作成した配列です。 これなバグなのでしょうか。 原因、回避策など、いろいろ調べましたが検討がつきません。 よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう