0

我在这里查看了一些答案,但我完全无法得到我正在寻找的东西,所以也许如果我根据我的情况询问它:

首先,让我说我对 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->nameor $goalObject->AAA0000->total。(或者$goalObject.AAA0000.name$goalObject.AAA0000.total速度中。)

如果我能做这样的事,我会很高兴的。但据我所知,Velocity 不允许像这样酷的东西。

拜托,有人在这里帮助我。

预先感谢您提供我可能得到的任何答案。

4

1 回答 1

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

于 2013-06-20T14:49:52.650 回答