2011-12-14 3 views
0

У меня есть набор категорий, которые я хочу прокрутить, и установить динамическую переменную/массив как петли страниц.Установить динамические переменные в цикле foreach

Кода я в настоящее время является:

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

Advert::listforPageArea функция возвращает объект объявления на основе какой категории будет выбран.

Я хочу, чтобы уметь рассчитывать дату истечения срока действия каждого объявления для использования в другом месте.

Я изо всех сил пытаюсь объяснить, что именно хочу, но я просто хочу установить пользовательский контент в цикле.

+5

Трудно понять, что вы просите здесь. Можете ли вы использовать какой-нибудь psedocode, чтобы объяснить, что вы хотите? – JohnP

+0

Я буду использовать неверный код, но, надеюсь, это объяснит, что я хочу: foreach ($ categories as $ category) { $ ad_. $ category ['shortname'] = Объявления :: listforPageArea (2, 1, $ category ['id']); } Это даст мне набор объектов, таких как: $ ad_business, $ ad_innovation и так далее. –

ответ

1

То, что вы ищете, называется «переменными переменными».

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

Связанная запись в блоге также отвечает на вопрос переменного объема (вопреки ответ Жоффруа, переменные переменные действительны вне цикла они созданы) и государство (правильно), что этот метод является весьма небезопасно, без проверки имен переменных.

Не могли бы вы пойти с массивом внутри массива? $arr['cat1']['cat2']

EDIT: как сделать это с многомерными массивами (см 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

Спасибо за это. Раньше я находил переменные переменные, но не мог понять, как их использовать. Я пробую: $$ ad_. $ category ['shortname'] = Объявления :: listforPageArea (2, 1, $ category ['id']); Но его инвалид. Какие-либо предложения? –

+0

Мое предложение было бы сбросить переменные переменные и пойти с двухмерным массивом, как упоминает Мартин. Это предотвратит затухание вашей области, и вы узнаете, какие переменные доступны. – JohnP

+0

Можете ли вы привести пример этого? Я не уверен, какой синтаксис я должен использовать. –

0

Содержимое, указанное в вашем цикле, будет ограничено этим циклом. Поэтому он не будет использоваться нигде (насколько я помню).

Если вы хотите, вы можете создать переменную типа:

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

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

Чтобы иметь возможность получить доступ к переменным в другом месте, вам нужно будет хранить значение вне цикла, например, в виде ассоциативного массива.

Другим решением было бы включить дату истечения срока действия в объект объявления или выставить метод для его получения в классе.

+0

Объем этих созданных переменных - это окружающая функция, а не цикл. –

+0

Хорошо, спасибо :) Я не был уверен, проблема при переключении на C/C++ все время :) – Geoffroy

Смежные вопросы