2011-12-14 62 views
0

我有一組要循環遍歷的類別,並將一個動態變量/數組設置爲頁面循環。在foreach循環中設置動態變量

我目前擁有的代碼是:

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

Advert::listforPageArea函數根據選擇何種類型的廣告的對象。

我希望能夠計算每個廣告在其他地方使用的到期日期。

我很努力地解釋到底我想要什麼,但我只是想在循環中設置自定義內容。

+5

很難理解你在這裏要求什麼。你能用一些psedocode來解釋你想要的嗎? – JohnP 2011-12-14 11:02:26

+0

我將使用無效的代碼,但希望這將解釋我想要的: foreach($ categories as $ category) { $ ad_。 $ category ['shortname'] = Advert :: listforPageArea(2,1,$ category ['id']); } 這會給我一組對象,如: $ ad_business,$ ad_innovation等。 – 2011-12-14 11:10:01

回答

1

您要搜索的內容稱爲「變量變量」。

http://foundationphp.com/blog/2010/12/18/understanding-php-variable-variables/

鏈接的博客條目還回答了可變範圍問題(違背Geoffroy的答案,可變的變量是有效的,他們都創造了環外)和狀態(正確),這種方法是非常不確認變量名稱而不安全。你可以用一個數組中的數組來替代嗎? $arr['cat1']['cat2']

編輯:如何與多維數組做到這一點(見http://php.net/manual/en/language.types.array.php

$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')); 
} 

!重要提示:您一次使用變量$category,而另一次使用關聯數組。您不能簡單地將數組評估爲字符串。我猜你的數組$category可能包含一些字段name?,因爲它似乎包含一個名爲id的字段。您必須在$ads[$category['field???']][]中使用該字段名稱,否則您的行Advert::listforPageArea(2, 1, $category['id']);不正確。

0

您在循環中設置的內容將被限制爲該循環。所以它不會在其他地方使用(據我所知)。

如果你願意,你可以創建一個變量,如:

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

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

爲了能夠在其他地方訪問你的變量,你需要的數據存儲到循環,如關聯數組之外。

另一個解決方案是在Advert對象中包含失效日期,或者暴露一個方法在類中獲取它。

+0

這些創建的變量的範圍是周圍的函數,而不是循環。 – 2011-12-14 11:20:49