プロが教える店舗&オフィスのセキュリティ対策術

$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}";
}

A 回答 (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;
}
}

この書き方が一番素直だと思いますけどね。
    • good
    • 0
この回答へのお礼

教えていただいたコードを参考に以下のようにすることで期待通りの結果を得ることができました。
ありがとうございました。


$cookie = $_COOKIE["genre"];
$code_genre = array(
"yahoo-japan" => "100",
"google-japan" => "200"
);
foreach ($code_genre as $key => $val) {
if ($cookie == $key) {
$category= $val;
}
}

お礼日時:2012/07/31 00:13

わざわざ変数名に使わなくても、普通はこういう処理にしませんかねぇ・・・



$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'];
}
}
    • good
    • 0

${~~} というのは「可変変数」と言います。

変数名を式で指定する方法。
$a = 123; と、${"a"} = 123; は同じです。

ただ、- は変数名に使えないことになっているので、${"yahoo-Japan"} が使えるのは たまたま な気がします。

>ハイフンが含まれた変数名を使う必要があるのですが、

これは方針が間違っています。cookie名をハッシュのキーにすれば済むだけでしょう。

この回答への補足

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

補足日時:2012/07/29 18:53
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!