我有一个来自webservice的JSON结果,这是出于某种疯狂的原因,就像表一样创建。参见:
{
"headers": [
"field_a",
"field_b",
"field_c"
],
"rows": [
[
"value 1",
123.212,
true
],
[
"value 2",
542,
false
],
[
"value 3",
342,
false
],
[
"value 4",
5452,
false
],
[
"value 5",
32,
true
]
],
"totalRows": 5
}
这很糟糕,因为我不能说$ json-> field_a,而是我需要在foreach中循环“行”并将其作为数组访问,如$ json => $ obj {$ obj [0]}获取第一个值。
我正在尝试创建一个类似的函数:
function fixOutput($jsonResponse){
$newResponse = array_combine(array_values($jsonResponse->headers), array_values($jsonResponse->rows));
}
但它给出了警告:
警告:array_combine():两个参数都应具有相同数量的元素
所以,在我花费数小时试图找到正确的解决方案之前,是否有人可以帮助我,创建这种方法,最内存最佳的方式,因为我将在生产中获得的JSON响应将介于10之间和2000行。
先谢谢你,伙计们:)
答案 0 :(得分:1)
您的功能不起作用,因为您尝试将$jsonResponse->rows
数组的内容与$jsonResponse->headers
结合起来,而不是合并$jsonResponse->rows
的每个元素带标题的数组。
我只会使用一个普通的旧foreach循环。
$data = [];
$headers = $jsonResponse->headers;
$nrOfHeaders = count($headers);
foreach ($jsonResponse->rows as $row) {
$newRow = [];
for($i = 0; $i < $nrOfHeaders; $i++) {
$newRow[$headers[$i]] = $row[$i];
}
$data[] = $newRow;
}
data
现在是一个包含关联数组的数组。您可以通过简单地修改此示例来使用stdClass
对象。