2011-12-14 145 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