php如何动态更改变量名?

时间:2011-07-27 18:51:24

标签: php

我有一个脚本可以提取XML信息,然后将其放入JSON格式。我正在尝试更改变量名称,因为在将json解码后,我将所有内容都放入表格中进行转换。

例如,有11个分数将被列出,而不是写出所有11个我想在循环发生时动态更改名称。我遇到的问题是在studentInformation.php文件中,我在旁边放了一条注释,以便更容易发现。希望我已经很好地解释了我的问题:P

xml文件中的节点(是的,它只是第一个标签,但你明白了)

<set1score>
<set2score>
<set3score>
<set4score>
<set5score>
<set6score>
<set7score>
<set8score>
<set9score>
<set10score>
<set11score>

xmlParse.php

<?php
class xmlParse
{   
    private $xmlFile;

    public function __construct($xmlFile)
    {
        $this->xmlFile = $xmlFile;
    }
    private function xmlVerify($p)
    {
        return pathinfo($p,PATHINFO_EXTENSION)=='xml';
    }
    public function encodeJSON()
    {
        if($this->xmlVerify($this->xmlFile))
        {
            $xml = simplexml_load_file($this->xmlFile);
       return json_encode($xml->children());
        }
        else
        {
            return ('<script>alert(\'error with xml file validation\');</script>');
        }
    }
}
?>

studentInformation.php

<?php
class studentInformation extends xmlParse
{
    private $xmlFile;

    public function __construct($xmlFile)
    {
        parent::__construct($xmlFile);
    }
    private function decodeJSON($i)
    {
        $j = json_decode($i);
   return $j;
    }
    public function getStudentInformation()
    {
        $output = '';
   $count = 1;
   foreach($this->decodeJSON($this->encodeJSON($this->xmlFile))->student as $v)
        {
       $output .= "<tr>";
       $output .= "<td>" . $v->lname . "</td>";
       $output .= "<td>" . $v->fname . "</td>";
       $output .= "<td>" . $v->set($count)score . "</td>"; //PROBLEM HERE!!!!!
       $output .= "</tr>";
       $count++;
   }
   return $output;  
}
}
?>

3 个答案:

答案 0 :(得分:3)

可怕的糟糕设计。为什么不......

<score num="1">
<score num="2">
etc...

只有在您需要访问特定分数时才需要这样的参考。如果您只是使用XML作为临时存储介质进行传输,那么即使是简单的<score>也可以,因为您只需要迭代/提取/销毁。

答案 1 :(得分:0)

试试这个:$output .= "<td>" . $v->'set'.$count.'score' . "</td>";

答案 2 :(得分:0)

创建动态变量:

$setCount = 'set' .$count. 'score';
$$setCount = $score;