То, что вы ищете, называется «переменные переменные».
См. http://foundationphp.com/blog/2010/12/18/understanding-php-variable-variables/
Связанная запись в блоге также отвечает на вопрос о области видимости переменных (в отличие от ответа Джеффроя, переменные переменные действительны вне цикла, в котором они созданы) и утверждает (правильно), что этот метод крайне небезопасен без проверки имен переменных.
Не могли бы вы вместо этого использовать массив внутри массива? $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']);
неверна.