Php 带点插入键的Smarty阵列

Php 带点插入键的Smarty阵列,php,smarty,Php,Smarty,我在PHP中有一个数组,如下所示: $config['detailpage.var1'] $config['detailpage.var2'] $config['otherpage.var2'] $config['otherpage.var2'] ... 要在Smarty中访问它,我会这样做 $smarty->assign('config', $config); 使用此模板: {$config.detailpage.var1} 不幸的是,这不起作用,因为我的数组键“detailpag

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

$config['detailpage.var1']
$config['detailpage.var2']
$config['otherpage.var2']
$config['otherpage.var2']
...
要在Smarty中访问它,我会这样做

$smarty->assign('config', $config);
使用此模板:

{$config.detailpage.var1}
不幸的是,这不起作用,因为我的数组键“detailpage.var1”中有一个点,对于Smarty来说,它是数组元素的定界符。 由于我不想重写我的配置数组(因为它在许多其他地方使用),我的问题是:

有没有其他符号可以用来表示数组键中的点?
或者我可以以某种方式逃避它们吗?

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

您可以重新格式化关联数组中的键,以符合智能编译器正则表达式

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

现在您可以使用
{$config.detailpage\u var1}
,只需将
替换为
\u


在阵列中行走

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

这不是最聪明的解决方案,但它应该可以:

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

{$array[“key.with.dot”]}

或:

{$array[“key.with.dot”][“subkey”]}

我在这里寻找答案后“意外”找到了这个问题的答案。在本例中,我使用主机名作为始终带有点的键。您可以在虚线键名称周围使用{}来访问它们。 e、 g.
{$var.foo.bar.{“my.hostname.example.com”}.ipaddress}


这种“转义”语法也可用于必须展开包含点的变量的情况。e、 g.
{$var.foo.bar.{$var.bingo}

不起作用。[is not allowed:致命错误:未捕获异常'exception',第32行“{$config.[detailpage.var1]}”上有消息“模板“index.htm”中的语法错误”-意外的“[”,应为“{”、“$”、“identifier”、整数中的一个,我尝试了{$config{detailpage.var1}这也是一个很好的解决方法。+1谢谢。但我会等待是否有人会提出更好的解决方案,然后再接受它。我也会建议您遵循Zend的编码标准:我绝对同意。但该项目已经有了这个变量。但这将是一个好主意!+1好主意。+1但我会优先考虑r来自RobertPitt的解决方案,因为它对$config数组中的所有变量都是自动的。使用您的解决方案,我必须在每次(第一次)配置变量调用之前放置赋值行。
{assign var=myKey value="detailpage.var1"}
{$config.$myKey}