如何访问可变的类字段

时间:2014-03-15 02:08:36

标签: php json

首先,看看my example json output

我有下一个问题。我在counterData部分的json代码中有一些字段,如'counter_87'或'coutner_88'。这是一个变量。我需要访问这个变量类字段。

Ofc,我可以写:

foreach($objCounter->countersData as $data)
{
    print $data->counter_87;
}

工作正常。但...

我有计数器ID,我需要访问根据此ID命名的字段。

完整代码,它将显示我想要的内容:

foreach($objCounter->countersData as $data)
{
    $row = "<td width=100px>$data->month $data->year</td>";
    foreach($objCounter->counters as $counter)
    {
        $counterId = $counter->id;
        $counterValue = "$data->counter_$counterId";
        $row .= "<td>$counterValue</td>";
    }
    $table .= "<tr>$row</tr>";
}

我需要同样的东西:

$foo = 'bar';
$bar = 'foobar';
echo $$foo; // foobar will be printed

但是有课程。

谢谢。

1 个答案:

答案 0 :(得分:1)

如果您不想或不能更改您的JSON结构,您也可以执行以下操作,如评论中已经提到的那样。

$field_name = 'counter_'.$id;
$field_value = $data->$field_name;
$row .= "<td>$field_value</td>";
// or $row .= '<td>'.$data->$field_name.'</td>';

关于重写JSON。这里的代码可以将您的JSON转换为稍微好一点的结构。

$data = json_decode($data_json);
foreach($data->countersData as $counter_data) {
    $counters = array();
    foreach($counter_data as $key => $val) {
        if(substr($key, 0, 8) == 'counter_') {
            $counters[substr($key, 8)] = $val;
            unset($counter_data->$key);
        }
    }
    $counter_data->counters = $counters;
}
$data_json_new = json_encode($data);

使用数组代替'counter_1'之类的字段,'counter_2'表示具有以下结构:

$countersData[0]->counters[90] = 1;
$countersData[0]->counters[89] = 1;
$countersData[0]->counters[88] = 1;

而不是

$countersData[0]->counters_90 = 1;
$countersData[0]->counters_89 = 1;
$countersData[0]->counters_88 = 1;

这意味着拥有一个名为counter的关联数组,而不是像'counter_90'之类的单独字段。它使得以编程方式访问数据变得更加容易。

请注意,关联数组与stdClass非常相似。基本上是用于相同目的的不同数据类型。使用数组来表示数据只会使处理整数键变得更容易。您可以使用json_decode($ data_json,true)来获取作为关联数组返回的数据。