首先,看看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
但是有课程。
谢谢。
答案 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)来获取作为关联数组返回的数据。