我在这里看了几个答案,我很难得到我正在寻找的东西,所以也许我会根据自己的情况提出这个问题:
首先,让我说我是非常新的Velocity,但我非常精通PHP。我知道我们在这里将苹果与橘子进行比较,但只是通过这个例子来承担我。
想象一下:我在数据库中新鲜的对象数组中有一些数据。每条记录中都有一个唯一标识符。我想在对象中使用这个唯一标识符作为变量名。
在PHP中,这很简单:
<?php
$goalObject = new stdObject();
foreach ($row as $data)
{
$identifier = $data->unique_id;
$goalObject->$$identifier = new stdObject();
$goalObject->$$identifier->name = $data->name;
$goalObject->$$identifier->total = $data->num_apples + $data->num_oranges;
}
请注意identifier
( $$ )的双重印记。
现在,值得注意的是unique_id确实以字母开头,所以它应该可以用作变量名。一个例子unique_id就像AAA0000或类似的东西。没有空格,没有连字符,没有任何标点符号。
因此,我的目标对象是$goalObject->AAA0000->name
或$goalObject->AAA0000->total
。 (或者在Velocity中$goalObject.AAA0000.name
和$goalObject.AAA0000.total
。)
如果我能做那样的话,我会很开心的。但据我所知,Velocity不允许任何像这样酷的东西。
拜托,有人在这里帮助我。
提前感谢您提出的任何答案。
答案 0 :(得分:0)
这不是我想要的,但我设法使用地图来实现这一点。我想我只是不完全明白其他答案在说什么。通常情况下,我会删除这篇文章并假装从未发生过,但可能会有人出现类似问题。
为了让$goalObject.AAA0000.name
起作用,我必须创建一张地图。
#set($goalObject = {})
#foreach ($data in $row)
#set($identifier = $data.unique_id)
#set($name = $data.name)
#set($total = $data.num_apples + $data.num_oranges)
#set($dummy = $goalObject.put({
'name' : $name,
'total' : $total
}))
#end
到目前为止,这对我有用,但我不必输入$goalObject.AAA0000.name
,而是使用$goalObject.get("AAA0000").name
。我很高兴它正在发挥作用。