我有一组我要循环的类别,并设置动态变量/数组作为页面循环。
我目前的代码是:
foreach($categories as $category)
{
$category_ads[] = Advert::listforPageArea(2, 1, $category['id']);
}
Advert::listforPageArea
函数根据选择的类别返回广告的对象。
我希望能够计算在其他地方使用的每个广告的到期日期。
我正在努力解释我想要的内容,但我只是想在循环中设置自定义内容。
答案 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 */;
为了能够在其他地方访问变量,您需要将值存储在循环之外,例如在关联数组中。
另一个解决方案是在广告对象中包含失效日期,或者公开一个方法以在类中获取它。