Массив присяжного острослова с точкой в ключе

У меня есть массив в PHP, который похож на это:

$config['detailpage.var1']
$config['detailpage.var2']
$config['otherpage.var2']
$config['otherpage.var2']
...

Для доступа к нему в Присяжном острослове, я сделал бы

$smarty->assign('config', $config);

С этим шаблоном:

{$config.detailpage.var1}

К сожалению, это не работает, из-за точки в моем ключе массива "detailpage.var1", который для Присяжного острослова является разделителем для элементов массива. Поскольку я не хочу переписывать свой массив конфигурации (причина, это используется во многих других местах), мой вопрос:

Есть ли какая-либо другая нотация, которую я мог использовать, который работает с точками в ключах массива? Или я могу так или иначе выйти из них?

5
задан JochenJung 14 July 2010 в 09:39
поделиться

3 ответа

Не самое умное решение, но оно должно работать:

{assign var=myKey value="detailpage.var1"}
{$config.$myKey}
7
ответ дан 18 December 2019 в 11:52
поделиться

Попробуйте использовать нотацию массива {$ config ['detailpage.var1']} или {$ config [detailpage.var1]}.

3
ответ дан 18 December 2019 в 11:52
поделиться

Вы можете переформатировать ключи в ассоциативном массиве для соответствия Smart Compiler Regex'ам.

$configS = array();
foreach($config as $key => $value)
{
    $key = str_replace('.','_',$key);
    $configS[$key] = $value;
}
$smarty->assign('config', $configS);

ИЛИ

$configS = array();
foreach($config as $key => $value) $configS[str_replace('.','_',$key)] = $value;
$smarty->assign('config', $configS);

Теперь вы можете использовать {$config.detailpage_var1} вместо этого, просто замените . на _.


Пройдитесь по массиву,

function cleanKeysForSmarty(&item,$key)
{
    return array(str_replace('.','_',$key) => $value);
}
$smarty->assign("config",array_walk_recursive($config,'cleanKeysForSmarty'));

Что-то в этом роде.

3
ответ дан 18 December 2019 в 11:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: