2013-06-20 118 views
0

我已经通过了几个答案,看着这里,我只是很不能得到什么我要找的,所以也许如果我问它具体到我的情况:动态变量

首先,让我们我说我是非常新的速度,但我非常精通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

这看起来像一个最近的帖子的副本:http://stackoverflow.com/questions/17084542/construct-variable-names-dynamically-in-velocity – Edd

回答

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。我很高兴它的工作。

+1

$ goalObject.AAA0000.name应该为你工作......您不必显式使用.get()来检索地图值 – Edd