如何修复JSON结果,其中标头与PHP中的值分开

时间:2016-10-18 12:46:49

标签: php json

我有一个来自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行。

先谢谢你,伙计们:)

1 个答案:

答案 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对象。