2011-12-14 26 views
0

ループするカテゴリのセットがあり、ページがループするときに動的変数/配列を設定します。foreachループで動的変数を設定する

私は現在持っているコードは次のとおりです。

foreach($categories as $category) 
{ 
    $category_ads[] = Advert::listforPageArea(2, 1, $category['id']); 
} 

Advert::listforPageArea機能が選択されているものをカテゴリに基づいて広告のオブジェクトを返します。

他の場所で使用する各広告の有効期限を計算できるようにしたいと考えています。

私が欲しいものを正確に説明するのは難しいですが、ループ内でカスタムコンテンツを設定したいだけです。

+5

あなたがここで求めていることは分かりません。あなたが望むものを説明するためにいくつかのpsedocodeを使用できますか? – JohnP

+0

私は無効なコードを使用しますが、うまくいけばこれは私が望むものを説明します: foreach($カテゴリとして$カテゴリ) { $ ad_です。 $ category ['shortname'] = Advert :: listforPageArea(2,1、$ category ['id']); } それは私に $ ad_business、$ ad_innovationなどのオブジェクトのセットを与えるでしょう。 –

答えて

1

あなたが探しているのは「変数変数」です。

http://foundationphp.com/blog/2010/12/18/understanding-php-variable-variables/リンクブログのエントリも、変数のスコープの質問に答える

と、この方法は高度であることを(正しく)の状態(ジョフロワの答えに反して、変数の変数は、彼らがで作成されたループの外に有効である)を参照してください。変数名を検証せずに安全でない。

代わりに配列内の配列を使用できますか? $arr['cat1']['cat2']

EDIT:多次元配列でこれを行う方法を

$ads = array(); // not explicitly needed, but clarifying 
// ... some code 
foreach($categories as $category) 
{ 
    if(!array_key_exists($category, $ads)) { $ads[$category] = array(); } // not explicitly needed 
    $ads[$category['name?']][] = Advert::listforPageArea(2, 1, $category['id']); 
    // or (see comment below) 
    $ads[$category][] = Advert::listforPageArea(2, 1, getCategoryField($category, 'id')); 
} 

http://php.net/manual/en/language.types.array.phpを参照してください)!!!重要:$categoryは可変のようなもので、連想配列のようなものです。単純に配列を文字列に評価することはできません。私はあなたの配列$categoryidという名前のフィールドを含むようにいくつかのフィールドname?が含まれていると思います。 $ads[$category['field???']][]またはにそのフィールド名を使用する必要があります。Advert::listforPageArea(2, 1, $category['id']);が正しくありません。

+0

ありがとうございました。以前は可変変数が見つかっていましたが、変数の使い方を理解できませんでした。 私はこれを試しています:$$ ad_。 $ category ['shortname'] = Advert :: listforPageArea(2,1、$ category ['id']); しかし、無効です。助言がありますか? –

+0

私の提案は、変数の変数を落とし、Martinが言及しているように2次元配列にすることです。これにより、スコープが複雑になるのを防ぎ、どの変数が利用可能であるかを知ることができます。 – JohnP

+0

あなたはこれの例を挙げることができますか?私はどのような構文を使用しなければならないのか分かりません。 –

0

ループで設定するコンテンツは、そのループに限定されます。だから、他の場所では使えないだろう(私が覚えている限り)。

したい場合は以下のように変数を作成することができます。他の場所であなたの変数にアクセスできるようにするに

//In the foreach loop 
$cat_name = "whatever"; 
$var_name = $cat_name . "_expiryDate"; 

$$var_name = 5 /* Calulcate the expiry date here */; 

、あなたは、このような連想配列のように、ループの外の値を格納する必要があります。

もう1つの解決策は、Advertオブジェクトに有効期限を含めるか、またはクラスに取得するためのメソッドを公開することです。

+0

これらの作成された変数の範囲は、ループではなく周囲の関数です。 –

+0

ありがとうありがとう:)私はいつもC/C++に切り替えるときに問題はないと思っていました:) – Geoffroy

関連する問題