Smarty数组带键中的点

时间:2010-07-14 09:39:49

标签: php smarty

我在PHP中有一个如下所示的数组:

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

要在Smarty中访问它,我会这样做

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

使用此模板:

{$config.detailpage.var1}

不幸的是,由于我的数组键“detailpage.var1”中的点,这不起作用,Smarty是数组元素的分隔符。 因为我不想重写我的配置数组(因为它在许多其他地方使用),我的问题是:

我可以使用其他符号与数组键中的点一起使用吗? 或者我可以以某种方式逃脱它们?

5 个答案:

答案 0 :(得分:7)

不是最聪明的解决方案,但应该有效:

{assign var=myKey value="detailpage.var1"}
{$config.$myKey}

答案 1 :(得分:3)

尝试使用数组表示法{$ config ['detailpage.var1']}或{$ config [detailpage.var1]}。

答案 2 :(得分:3)

您可以重新格式化关联数组中的键以符合Smart Compiler Regex'es。

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

OR

$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 :(得分:2)

我'意外"我在这里寻找答案之后找到了这个问题的答案。在这种情况下,我使用主机名作为始终有点的键。您可以使用虚线键名称周围的{}访问它们。 例如{$var.foo.bar.{"my.hostname.example.com"}.ipaddress}

这"逃脱"语法也可用于必须展开包含点的变量的情况。例如{$var.foo.bar.{$var.bingo}}

答案 4 :(得分:0)

使用:

{$ array [" key.with.dot"]}

或者:

{$阵列[" key.with.dot"] ["子项"]}