在smarty中访问php数组

时间:2011-03-10 16:38:42

标签: php smarty

我有一个像这样的方法的对象:$foo->getId()返回integer,我有一个像这样的数组:

$array(
     1=> array(
            "parent_id" => 14
     ),
     2=> array(
            "parent_id" => 15
     )
);

我需要使用parent_id作为$foo->getId()的索引键,以聪明的方式访问子阵列中的$array,例如:

{$array[$foo->getId()].parent_id}

也试过了:

{$array[$foo->getId()]}

但两者都返回错误:

syntax error: unidentified token 

我做得不对?

7 个答案:

答案 0 :(得分:7)

您可以尝试:

{$array.$foo->getId().parent_id}

如果这不起作用,我认为你必须事先将ID分配给另一个变量:

{assign var=foo_id value=`$foo->getId()`}{$array.$foo_id.parent_id}

在Smarty 3中,这应该有效:

{$array.{$foo->getId()}.parent_id}

答案 1 :(得分:3)

我刚尝试得到和你一样的错误。有趣的是,代码运行良好。在这里我们选择规格:Smarty 3.0.7 with PHP 5.3.4。

我的模板代码:

<html>
  <head>
    <title>Smarty</title>
  </head>
  <body>
    Hello, {$array[2]["parent_id"]}<br/>
    Hello, {$array[$foo->getId()]["parent_id"]}<br/>    
  </body>
</html>

php文件:

<?php

class Foo {

    public function getId() {
        return 2;   
    }   
}

// ... smarty config left out ... $smarty has been assigned successfully

$foo = new Foo();

$array = array(
   1 => array("parent_id" => 14),
   2 => array("parent_id" => 15)
);

$smarty->assign('array', $array);
$smarty->assign('foo', $foo);
$smarty->display('index.tpl');

?> 

输出:

Hello, 15
Hello, 15

答案 2 :(得分:1)

试试这个:

$array[$foo->getId()]["parent_id"]

答案 3 :(得分:1)

我将以这种方式使用变量:

$a=array(
     1 => array(
            "parent_id" => 14
     ),
     2 => array(
            "parent_id" => 15
     )
);

然后您可以像这样访问您的数组:

$a[1]["parent_id"]

答案 4 :(得分:0)

首先,不要忘记将两个变量传递给Smarty

$smarty->assign('array', $array);
$smarty->assign('foo', $foo);

并且,在您的Smarty模板中,使用:

{$array[$foo->getId()]["parent_id"]}

答案 5 :(得分:0)

从未使用过smarty,但在PHP中你可以这样做:

<?php

class foo {
   public function getId() {
        return (int)2;
    }
}

$array = array(
     1 => array(
            "parent_id" => 14
     ),
     2 => array(
            "parent_id" => 15
     )
 );

$foo = new Foo;

echo $array[(int)$foo->getId()]['parent_id'];
//15

我输入为整数(int)$foo->getID(),因为$array索引是整数,用括号{}将它们括在字符串中。

(也许您应该查看Foo::getID()并查看是否返回字符串)

在聪明的时候,你可以做这样的事情(理论上,因为我无法巧妙地测试它):

{$array[(int)$foo->getId()]['parent_id']}

//Also check if this works, but I suspect it shouldn't (the syntax it's not valid PHP)
{$array.(int)$foo->getId().parent_id}

答案 6 :(得分:0)

试试这个。从php文件中分配对象到smarty变量'foo'

{assign var="val" value=$foo->getId()}
{$arr.$val.parent_id}