PHPで変数名にハイフンを使うには?

このQ&Aのポイント
  • $yahoo-Japan変数名の書き方について解説します。
  • ハイフンを含む変数名を使用する方法として、${"yahoo-Japan"}という書き方があります。
  • 詳しい解説記事をご紹介します。
回答を見る
  • ベストアンサー

PHPで変数名にハイフンを使うには?

$yahoo-Japan="100";というような、ハイフンが含まれた変数名を使う必要があるのですが、そのままですと当然エラーになるため、いい書き方は、ないですか? とりあえず、${"yahoo-Japan"}="100";とダブルコーテーションと中カッコで囲ってみたところ、動いているようですが、ググッてみてもこのような書き方がヒットせず、この書き方が正しいのか自信がもてません。 解説しているサイトがあれば教えてください。 コードは以下のような感じです。cookieの値は私の管理外になる為、ハイフンを抜くことはできません。 $cookie = $_COOKIE["genre"]; $code_genre = array("yahoo-japan", "google-japan"); ${"category_yahoo-japan"} = "100"; ${"category_google-japan"} = "200"; if (in_array($cookie,$code_genre)) { $category = "${'category_'.$cookie}"; }

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

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

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

ANo.2です 一番多用するパターンを書き忘れてた(汗 $cookie = $_COOKIE["genre"]; $code_genre = array( array("yahoo-japan" => "100"), array("google-japan" => "200") ); foreach ($code_genre as $key=>$val) { if (in_array($key, $cookie)) { $category = $val; } } この書き方が一番素直だと思いますけどね。

JoEU6yzi
質問者

お礼

教えていただいたコードを参考に以下のようにすることで期待通りの結果を得ることができました。 ありがとうございました。 $cookie = $_COOKIE["genre"]; $code_genre = array( "yahoo-japan" => "100", "google-japan" => "200" ); foreach ($code_genre as $key => $val) { if ($cookie == $key) { $category = $val; } }

その他の回答 (2)

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

わざわざ変数名に使わなくても、普通はこういう処理にしませんかねぇ・・・ $cookie = $_COOKIE["genre"]; $code_genre = array("yahoo-japan", "google-japan"); $code_value = array("100", "200"); // $code_genreと同じ並びで定義する foreach ($code_genre as $key=>$val) { if (in_array($val, $cookie)) { $category = $code_value[$key]; } } もっと多く使うパターンはこうでしょうか $cookie = $_COOKIE["genre"]; $code_genre = array( // keyとvalで各々定義する array('key=>"yahoo-japan", 'val'=>"100"), array('key'=>"google-japan", 'val'=>"200") ); foreach ($code_genre as $arr) { if (in_array($arr['key'], $cookie)) { $category = $arr['val']; } }

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

${~~} というのは「可変変数」と言います。変数名を式で指定する方法。 $a = 123; と、${"a"} = 123; は同じです。 ただ、- は変数名に使えないことになっているので、${"yahoo-Japan"} が使えるのは たまたま な気がします。 >ハイフンが含まれた変数名を使う必要があるのですが、 これは方針が間違っています。cookie名をハッシュのキーにすれば済むだけでしょう。

JoEU6yzi
質問者

補足

cookie名をハッシュのキーにするというのがよく分からないのですが、 具体的にはコードを教えていただけたらお願いします。 私の中では、$cookie=str_replace("-","",$cookie);のような処理を追加する方向で考えていたのですが、これとは根本的に違うやり方ですか?

関連するQ&A

  • 変数とダブルクォーテーションの関係について

    $cookie1["$i"] = $col["$field["$i"]"]; 変数とダブルクォーテーションの記載方法ですが、 このソースで正常に動作させるには、”をどの様に記載すれば良いのでしょうか。 どうぞ宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PHP SESSION変数の削除について

    PHPでブラウザを×で閉じた場合、SESSION変数 の廃棄はどうすればよいのでしょうか? ガーペジコレクション(PHP.INI等の設定)に任せておけばよいのでしょうか? ちなみにログアウトの際は下記のプロシジャを実行しています。 ----------------------------- <?php session_start(); // セッション変数を全て解除する $_SESSION = array(); // セッションを切断するにはセッションクッキーも削除する。 // Note: セッション情報だけでなくセッションを破壊する。 if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } // 最終的に、セッションを破壊する session_destroy(); ?> -----------------------------

    • 締切済み
    • PHP
  • ダブルクォーテーションで囲まないと表示できない変数

    ネットから拾ってきたサンプルソースをphp5.2.3を使って試行錯誤中です。 今回、メール受信のソースを試しており、 exitに変数を添えて変数の確認をしていたところ、 8行目は変数が表示できず、 9行目のようにダブルクォーテーションで囲むと表示できる といった変数がいくつかあることに気付きました。 10行目などの変数は、ダブルクォーテーションなしでも表示できますし、 print関数だと、ダブルクォーテーションのあるなしにかかわらず表示できています。 どのような変数でおこる現象なのか、知りたいと興味がわきました。 ご存知の方がいらっしゃいましたら、ご回答よろしくお願い致します。 ソース概略 (文頭の数字は行数,$host/$user/$passは事前に代入済) 01 $sock = fsockopen($host, 110, $err, $errno, 10) or die("サーバーに接続できません"); 02 $buf = fgets($sock, 512); 03 if(substr($buf, 0, 3) != '+OK') die($buf); 04 $buf = _sendcmd("USER $user"); 05 $buf = _sendcmd("PASS $pswd"); 06 $data = _sendcmd("STAT"); 07 sscanf($data, '+OK %d %d', $num, $size);   // 以下、必要なもの以外はコメントアウトして確認 08 exit($num);  //表示できない 09 exit("$num"); //表示できる 10 exit($host);  //表示できる 11 print($num);  //表示できる 12 print("$num"); //表示できる

    • ベストアンサー
    • PHP
  • 変数使い方?(> <)

    アクションスクリプト初心者です。 変数iに0を代入して、ムービークリップをクリックされるたびに1ずつ増やしていき、1回目にクリックしたときと2回目にクリックしたときに異なる処理を行いたいと思っております。 一回目の処理はうまくいくのですが、2回目の処理はうまくいかず、1回目と同じ処理になります。 対処法を教えてください!お願いしますM(_ _)M onClipEvent (enterFrame){ i=0; } on(release){ i++; if(i==1){ getURL("http://www.yahoo.co.jp") } if(i==2){ getURL("http://www.google.co.jp") } }

    • ベストアンサー
    • Flash
  • PHP 文字分割で配列に。

    こんにちは。 先日よりPHPにて文字列を分割し配列する事に悩んでいます。 質問内容としましては、 $str = "文字","1,2,3","テキスト" を Array ( [0] => 文字" [1] => "1,2,3" [2] => "テキスト" ) の様に配列にしたいと思っています。 今までは、sprit(",", $str) で分割していましたが、PHP 5.3.0 で 非推奨となったことで explode(",", $str) に変更。 その後今回の様なデータは無く問題ありませんでしたが、新しくデータを読み込みした時、ダブルクォートの中にコンマがあり、 Array ( [0] => 文字" [1] => "1 [2] => 2 [3] => 3" [4] => "テキスト") と分割され、エラーとなりました。 色々、「Sprit」「PHP 分割 ダブルクォーテーション」等で検索しているにも関わらず、希望の情報がヒットしませんでした。 改善方法若しくは情報の記載されておりますサイトがあればご誘導いただければ幸いです。 初歩的な質問かと思いますが、お願い致します。 サーバの種類: MySQL サーバのバージョン: 5.5.42 - Source distribution PHP/5.6.10

    • ベストアンサー
    • PHP
  • 連想配列からリストを作成する関数

    連想配列からリストを作成する関数を作ろうと思っています。 関数をどのように書けばHTMLのソースのようになるでしょうか? //----- 関数 ----- function li($v) { } //----- 配列 ----- $s[0] = array( 'Google' , 'https://www.google.co.jp/' , ' - 検索エンジン' ); $s[1] = array( 'Yahoo! JAPAN' , 'http://www.yahoo.co.jp/' , ' - 検索エンジン' ); $s[2] = array( 'Goo' , 'http://www.goo.ne.jp/' , ' - 検索エンジン' ); $s[3] = array( 'ツイッター' , 'https://twitter.com/' , ' - ミニブログ' ); li($s); //----- 生成されるhtml ----- <ul> <li><a href="https://www.google.co.jp/" title="Google">Google</a> - 検索エンジン</li> <li><a href="http://www.yahoo.co.jp/" title="Yahoo! JAPAN">Yahoo! JAPAN</a> - 検索エンジン</li> <li><a href="http://www.goo.ne.jp/" title="Goo">Goo</a> - 検索エンジン</li> <li><a href="https://twitter.com/" title="ツイッター">ツイッター</a> - ミニブログ</li> </ul> //----- print_r ----- array(4) {  [0]=>  array(3) {   [0]=>   string(6) "Google"   [1]=>   string(25) "https://www.google.co.jp/"   [2]=>   string(16) " - 検索エンジン"  }  [1]=>  array(3) {   [0]=>   string(12) "Yahoo! JAPAN"   [1]=>   string(23) "http://www.yahoo.co.jp/"   [2]=>   string(16) " - 検索エンジン"  }  [2]=>  array(3) {   [0]=>   string(3) "Goo"   [1]=>   string(21) "http://www.goo.ne.jp/"   [2]=>   string(16) " - 検索エンジン"  }  [3]=>  array(3) {   [0]=>   string(10) "ツイッター"   [1]=>   string(20) "https://twitter.com/"   [2]=>   string(14) " - ミニブログ"  } }

    • ベストアンサー
    • PHP
  • ダブルクォーテーションつきでCSV出力したい

    今、PHPを勉強しています。 PHPでデータベースからとりだした配列を、CSVファイルに出力するサンプルプログラムをみつけました。 https://blog.supersonico.info/?p=869 このプログラムをそのまま実行すると、 CSVファイルに、 あああ,いいい,ううう,えええ かかか,ききき,くくく,けけけ と出力されます。 これを、ダブルクォーテーションつきで、 "あああ","いいい","ううう","えええ" "かかか","ききき","くくく","けけけ" と出力するにはどうすればいいのでしょうか? ***************************************** $csvFileName = '/tmp/' . time() . rand() . '.csv'; $res = fopen($csvFileName, 'w'); if ($res === FALSE) { throw new Exception('ファイルの書き込みに失敗しました。'); } $dataList = array(        //↓ここにダブルクォーテーションで囲ってもうまくいかない。↓ array('あああ','いいい','ううう','えええ'), array('かかか,'ききき','くくく','けけけ'), ); foreach($dataList as $dataInfo) { mb_convert_variables('SJIS', 'UTF-8', $dataInfo); fputcsv($res, $dataInfo); } fclose($res);

    • ベストアンサー
    • PHP
  • 検索サイトでヒットさせるには?

    ある大学のサークルHPを管理していますが。 最近新しく作り変えたら(URLも変えました) HPが検索サイトでヒットしないと苦情が出ました。 ヤフージャパンではヒットしているのでいいと思ってたんですが。 グーグルでヒットするようにしろということ・・かな? と思ってます。 携帯から見ている人もいるのですが、 どうすれば検索サイト(グーグルなど)にヒットさせられますか? 新入生を迎える時期が迫ってるのであせってます。

  • cookieが破棄できない【PHP】

    今PHPを習得中なんですが、以下のプログラムでクッキーの破棄ができません。 どこか間違いがあればご指摘お願いします。 <?php session_start(); print <<<____HTML____ <!doctype html> <html> <head> <meta charset="utf-8"> <title>無題ドキュメント</title> </head> <body> ____HTML____; /* -------------------- 処理を分岐 ------------------------ */ if(isset($_POST["do_logout"])){ $key = "do_logout"; } else $key = "do_not_logout"; switch($key){ case "do_not_logout": do_not_logout(); // ログアウトしない break; case "do_logout": do_logout(); // ログアウトする break; } /* --------------------- do_not_logout() ----------------------- */ function do_not_logout(){ header("Location:main.php"); } // do_not_logout() /* ------------------ do_logout() ---------------------- */ function do_logout(){ print "現在のセッション変数<br>"; // 現在のセッション変数 print_r($_SESSION); print "<br><br>"; print "現在のクッキー変数<br>"; // 現在のセッション変数 print($_COOKIE["PHPSESSID"].'<br>'); $_SESSION = array() ; // すべてのセッション変数を初期化 if (isset($_COOKIE["PHPSESSID"])) { // ここでクッキーを破棄 print "ここでクッキーを破棄<br>"; setcookie("PHPSESSID", '', time() - 1800, '/'); } session_destroy() ; // セッションを破棄 $Massage = "ログアウトが完了しました。\nまたのお越しをお待ちしております。\n"; print('セッション変数の確認<br>'); // セッションが破棄されているかの確認 if (!isset($_SESSION["login"])){ print "セッション変数は破棄されています。<br>"; }else{ print"セッション変数は破棄されていません。→{$_SESSION["login"]}<br>"; } print "セッションIDの確認をします。<br>"; // クッキーが破棄されているかの確認 if (!isset($_COOKIE["PHPSESSID"])){ print "クッキーは破棄されています。<br><br>"; }else{ print"クッキーは破棄されていません。→{$_COOKIE["PHPSESSID"]}<br>"; } } // do_logout() echo $Massage; print "<p><a href=\"index.php\">トップページに戻る</a></p>"; ?> </body> </html> /* -------------- 実行結果 (一部)------------------*/ 現在のクッキー変数 **************************d5ee33b19ef197aef ここでクッキーを破棄 Warning: Cannot modify header information - headers already sent by (output started at logout.process.php:18) in logout.process.php on line 81 セッション変数の確認 セッション変数は破棄されています。 セッションIDの確認をします。 クッキーは破棄されていません。→************************d5ee33b19ef197aef

    • ベストアンサー
    • 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

専門家に質問してみよう