foreachの中で使われている\の意味

このQ&Aのポイント
  • 質問文章の主旨は、foreachの中で使われている"\"の意味について知りたいです。
  • foreach文の中で\が使われている理由や役割について教えてください。
  • PHPのforeach文で\が何を意味しているのか教えてください。
回答を見る
  • ベストアンサー

foreachの中で使われている\の意味

●質問の主旨 下記のforeach文の中で使われている"\"は、 どういう意味で使われているのでしょうか? ご存知の方、ご教示よろしくお願いします。 ●コード(index.phpの一部) <tr> <td>書籍の満足度は?</td> <td> <?php // 配列からラジオボタンを作成する $ar_rate = array( "5"=>"満足", "4"=>"やや満足", "3"=>"普通", "2"=>"やや不満", "1"=>"不満", ); foreach ($ar_rate as $key=>$value) { echo "<input type=\"radio\" name=\"rate1\" value=\"{$key}\">{$value}"; } ?> </td> </tr> <tr> <td>書籍のボリュームは?</td> <td> <?php // 配列からラジオボタンを作成する foreach ($ar_rate as $key=>$value) { echo "<input type=\"radio\" name=\"rate2\" value=\"{$key}\">{$value}"; } ?> </td> </tr> ●参考文献 西沢直木 PHPプログラミングの教科書P175

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

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

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

echo "<input type=\"radio\" name=\"rate1\" value=\"{$key}\">{$value}"; 二重引用符で括った文字列リテラルの中に二重引用符を書くためにエスケープしています。 RTFM. http://www.php.net/manual/ja/language.types.string.php#language.types.string.syntax.double 個人的には単引用符で書く(変数は連結演算子で繋ぐ)方がいいと思います。波括弧で括ってphpにparseさせるのは連結以上に無駄な気がするので。 echo '<input type="radio" name="rate1" value="' . $key . '">' . $value;

dradra33
質問者

お礼

shimixさま ご回答ありがとうございます。 >二重引用符で括った文字列リテラルの中に二重引用符を書くためにエスケープしています。 アドバイスありがとうございます。 今後の参考にさせていただきます。

関連するQ&A

  • foreachについて

    phpを今勉強中なのですがforeachで少し分からない部分があります。 例えば(1)はnのある配列を消去するだけのプログラムでして、これを (2)のように書き換えてみると、全て表示されてしまい、(1)と同じ動きをしません。 phpマニュアルを読む限り同じ動きをすると思うのですが、array_keys($key1)の中に うまく一時配列のキーが入っていないように思います。 どうしてでしょうか? (1) <?php $food["y"]["bb"]= "k1"; $food["n"]["bb"]= "k2"; $food["n"]["cc"]= "k3"; $food["k"]["dd"]= "k4"; foreach($food as $key=>$key1){ foreach($key1 as $key2=>$key3){ if($key=="n") unset($food[$key][$key2]); } } echo "<pre>"; print_r($food); echo "</pre>"; ?> (2) <?php $food["y"]["bb"]= "k1"; $food["n"]["bb"]= "k2"; $food["n"]["cc"]= "k3"; $food["k"]["dd"]= "k4"; foreach($food as $key=>$key1){ foreach($key1 as $key2=>$key3){ if(in_array("n",array_keys($key1))) unset($food[$key][$key2]); } } echo "<pre>"; print_r($food); echo "</pre>"; ?>

    • ベストアンサー
    • PHP
  • foreachの使い方

    ------------------------------------------- include.php <?php $kakaku = array(1=>'300', 2=>'500' ); $picture = array(1='img/pan.jpg', 2='img/choko.jpg' ); ?> ------------------------------------------- index.php <table border="1" height="188" width="461"> <tr> <td width="458" height="160"><img border="0" src="<?php echo $picture ;?>" width="190" height="157"> <font size="4" color="#FF00FF"><b><?php echo $kakaku ;?></b></font></td> </tr> </table> -------------------------------------------- この時に <tr> <td width="458" height="160"><img border="0" src="<?php echo $picture ;?>" width="190" height="157"> <font size="4" color="#FF00FF"><b><?php echo $kakaku ;?></b></font></td> </tr> の部分を変数の値の分だけ繰り返したい時、 <?php foreach($picture AS $key => $val) { ?> <? } ?> <?php foreach($kakaku AS $key => $val) { ?> <? } ?> はどう記述したらいいのですか?? 結果的には <table border="1" height="188" width="461"> <tr> <td width="458" height="160"><img border="0" src="img/pan.jpg" width="190" height="157"> <font size="4" color="#FF00FF"><b>300円</b></font></td> </tr>  <tr> <td width="458" height="160"><img border="0" src="img/choko.jpg" width="190" height="157"> <font size="4" color="#FF00FF"><b>500円</b></font></td> </tr> </table> というふうにしたいのです! よろしくお願いします。

    • ベストアンサー
    • PHP
  • テーブルデータ表示

    mysqlからデータをphpで取得し以下のような多次元配列になっています。 Array ( [0] => Array ( [id] => 116 [name] => あああ ) [1] => Array ( [id] => 58 [name] => いいい ) [2] => Array ( [id] => 89 [name] => ううう ) ) 単純にデータを表示させたく以下のようにしましたが<th>$key2</th>の箇所が上記配列の場合 2回繰り返されて表示されてしまいます。ここはフィールド名なので1回の表示でいいのですが どのように記述すれば思うような表示になるでしょうか? echo "<table border=\"1\">"; echo "<tr>"; foreach ($tmp1 as $key => $val) { foreach ($val as $key2 => $val2) { echo "<th>" . $key2 . "</th>"; //フィールド名 } } echo "</tr>"; foreach ($tmp1 as $key => $val) { echo "<tr>"; foreach ($val as $key2 => $val2) { echo "<td>" . $val2 . "</td>"; // 取得したデータをある分だけ繰り返し } echo "</tr>"; } echo "</table>";

    • ベストアンサー
    • PHP
  • foreach のバグでしょうか。PHP 5.3.3 で悩んだところが

    foreach のバグでしょうか。PHP 5.3.3 で悩んだところがあります。 あるレコードが正規表現にマッチした場合、そのレコードに対して何らかの処理をするスクリプトを書いていました。 しかし思ったように動かず原因を調べました。結果、配列の値が変わっていることに気づきました。  ◇テスト用レコードの内容   http://www.yahoo.co.jp/   http://www.bing.com/   http://www.goo.ne.jp/   http://www.google.co.jp   http://d.hatena.ne.jp/  ◇先頭一致して欲しい文字列   http://www.google.co.jp/   http://www.bing.com/   http://www.youtube.com/  この場合、処理の対象は2件です。  私が書いたスクリプトでは3回マッチしてしまいます。  以下、テスト用に作ったスクリプトです。 <?php // URL のパターンを用意 (とりあえず以下の3パターン) $ar = array(); $ar['Google'] = array(  'URL' => 'http://www.google.co.jp/' ); $ar['Bing'] = array(  'URL' => 'http://www.bing.com/' ); $ar['YouTube'] = array(  'URL' => 'http://www.youtube.com/' ); // 先頭一致の正規表現にする foreach($ar as $key => &$value){  $value['regex'] = '/^' . preg_quote($value['URL'], '/') . '/'; } echo("URL の パターンを出力してみる/n"); print_r($ar); // テスト用 レコード $list = array(); $list[] = 'http://www.yahoo.co.jp/'; $list[] = 'http://www.bing.com/'; // match. $list[] = 'http://www.goo.ne.jp/'; $list[] = 'http://www.google.co.jp/'; // match. $list[] = 'http://d.hatena.ne.jp/'; // マッチするのは2回のみ...のはずが for($n = 0; $n < count($list); $n ++){  foreach($ar as $key => $value){   if(preg_match($value['regex'], $list[$n], $match)) echo("match.\n");  } } echo("もう一度 URL のパターンを出力してみる\n"); print_r($ar); echo("なぜか一番最後の配列の値が変わっている。\n"); ?>

    • ベストアンサー
    • PHP
  • foreachとかの勝手な省略?

    PHP初心者です。 foreachを使うときに、参考サイトのソースを見て???だったのですが、 例えば以下の場合に foreach($_POST['hoge'] as $key => $val){ echo "$key : $val \n"; } とありますが、hogeは自分で決めたものなので分かるのですが、 見に覚えの無い$key => $valといった変数で動作しています。 $keyや$valは自分で定義した覚えはありません。 調べると$keyは分かりませんが、$valはvalueの省略みたいな記述がありました。 また、他には更に短縮され、$kとか$vしか記述されていないソースもあり、 試すとこれでも正常に動いています。 これはどういうことなのでしょうか? 何か決まりがあるのでしょうか。 ちなみに、チェックボックスの配列取得の定義に使いました。 私からはただ勝手に短縮しているようにしか見えず納得いきません。 お詳しい方、どなたかアドバイス頂けないでしょうか。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • switch文の中でforeach

    switch文の中でforeachをしたいのですが、うまくいきません。 <現状> $x=5; switch( $x ){  case 2:   echo $x="JavaScript";    break;  case 5:   echo $x="PHP";   break;  default:   echo $x="未分類"; } <やりたいこと>判定データを別で用意して、読み込ませたい $x_master = array(  2 => "JavaScript",  5 => "PHP", ); ■テスト1 $x=5; switch( $x ){  foreach( $x_master as $key => $value ){   case $key:    echo $x=$value;   break;  }   default:    echo $x="未分類"; } これを試すと、Parse error: syntax error, unexpected T_FOREACH, expecting T_CASE or T_DEFAULT or '}'となります。これは、switchの中でforeachは使えないということでしょうか? ■テスト2 $x=5; foreach( $x_master as $key => $value ){  switch( $x ){   case $key:    echo $x=$value;    break;   default:    echo $x="未分類";  } } $x=2;だとJavaScript未分類となるのに、$x=5;だと未分類未分類になります。 $x=2と$x=5で挙動が異なる理由が分かりません。 ■テスト3 $x=5; foreach( $x_master as $key => $value ){  switch( $x ){   case $key:    echo $x=$value;   break;  } } これでようやく望んだ結果が得られたのですが、これでo.k.のなのでしょうか? なんでdefault入れてはダメなのでしょうか? foreachでいくら回しても、該当部分が存在する限り、breakして、defaultへはいかないと思うのですが…。それともforeachの一番最後の終了処理で何かが返ってきて、それが該当項目に存在せず、defaultへ流れる結果となるのでしょうか? そもそも、考え方として、foreachで回している以上、この場合、例外というか、switch文のdefaultに該当する部分は必要ないとの認識でよいでしょうか? 質問内容 ■テスト1が、syntax errorとなる理由 ■テスト2で、$x=2なら$x_masterを読み込むのに、$x=5なら$x_masterを読み込まない理由 ■テスト3のケースは、default部分を本当に書かなくてo.k.でしょうか? またその理由は?

    • ベストアンサー
    • PHP
  • POSTを配列として送信し、キーと値を一覧で表示

    formに入力した値をPOSTを配列として送信し、 そのキーと値の一覧表を作ってみようとしたのですが、 思うように動いてくれません。何が間違っているのでしょうか。 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>POSTを配列で送信して取得する</title> </head> <body> <?php if($_SERVER[REQUEST_METHOD]=="POST"){ if(isset($_POST["submit_no"])){ echo "<table border=\"1\"><tr><td>番号</td><td>内用</td><tr>"; while($key_no = key($_POST[no])+1){ //+1は番号を1から表示させるため $values = htmlspecialchars($_POST[no],ENT_QUOTES); echo <<< EOS <tr> <td>$key_no</td> <td>$values</td> </tr> EOS; } echo "</table>"; } } ?> <form action="post_hairetu.php" method="POST" enctype="multipart/form-data"> 1<input type="text" name="no[]" value="" /><br /> 2<input type="text" name="no[]" value="" /><br /> 3<input type="text" name="no[]" value="" /><br /> <input type="submit" name="submit_no" value="送信" /> </form> </body> </html>

    • ベストアンサー
    • PHP
  • foreachの疑問

    <pre> <?php $a=array('x'=>1,'y'=>2,'z'=>3); foreach($a as $key=>$value) { print"$key:$value\n"; } foreach($a as $key=>&$value) { $value="<<$value>>"; } foreach($a as $key=>$value) { print"$key:$value\n"; } ?> </pre> の応答が x:1 y:2 z:3 x:<<1>> y:<<2>> z:<<2>> となり x:1 y:2 z:3 x:<<1>> y:<<2>> z:<<3>> となりません。 どうすればよいでしょうか? 環境はFedoraCore4-PHP5(アップデータしたばかり)です。

    • ベストアンサー
    • PHP
  • [初歩?]FOREACHの構文エラーの原因がわからない

    下記を表示すると Warning: Invalid argument supplied for foreach() in とエラーになってしまい、どうしても原因がわからないのですが・・ よろしくお願い致します <html> <body> <form action="$PHP_SELF" method="post"> <input type="radio" name="q2[]" value="0"<?php foreach ($_POST['q2'] as $q2_sel) { if ( $q2_sel == '0') { echo " selected"; }} ?>>男 <input type="radio" name="q2[]" value="1"<?php foreach ($_POST['q2'] as $q2_sel) { if ( $q2_sel == '1') { echo " selected"; }} ?>>女 </form> </body> </html>

    • ベストアンサー
    • PHP
  • foreachについて

    下記の配列についてitem2の値のみ取り出したいのですが、 foreach($food as $key1=>$array){ foreach($array as $key2=>$array2){ echo $food["$key1"]["item2"]; } } foreachで回して取り出すと555444333となります。 543という結果が欲しいのですが、 実際には下記の配列が数百と大量にあり、一次元配列の数字は下記のように0から1ずつ増えていきます。(二次元目のキーは全てitem0~item2となっています) キーの変更をしないでitem2の値のみ一度に取り出すにはどうしたらよいのでしょうか? (取り出す前に配列の削除などのプログラムもあるため、0から順番に並んでいるとは限りません。 ) $food["0"]["item0"]="y"; $food["0"]["item1"]="bi"; $food["0"]["item2"]="5"; $food["1"]["item0"]="y"; $food["1"]["item1"]="dou"; $food["1"]["item2"]="4"; $food["2"]["item0"]="n"; $food["2"]["item1"]="co"; $food["2"]["item2"]="3";

    • ベストアンサー
    • PHP

専門家に質問してみよう