在foreach循环中设置动态变量

时间:2011-12-14 11:00:02

标签: php variables foreach

我有一组我要循环的类别,并设置动态变量/数组作为页面循环。

我目前的代码是:

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

Advert::listforPageArea函数根据选择的类别返回广告的对象。

我希望能够计算在其他地方使用的每个广告的到期日期。

我正在努力解释我想要的内容,但我只是想在循环中设置自定义内容。

2 个答案:

答案 0 :(得分: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']);不正确。

答案 1 :(得分:0)

您在循环中设置的内容将仅限于该循环。所以它不会在其他地方使用(据我记得)。

如果您愿意,可以创建一个变量:

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

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

为了能够在其他地方访问变量,您需要将值存储在循环之外,例如在关联数组中。

另一个解决方案是在广告对象中包含失效日期,或者公开一个方法以在类中获取它。