将数字数组转换为关联数组

时间:2013-02-10 17:41:29

标签: php json

以下JSON结构:

{
    "details":
    [
        {"specific_exercise.distance" : "14",},
        {"specific_exercise.avg_pace" : "7.5"}
    ]
}

在使用json_decode()时转换为此:

stdClass Object
(
    [details] => Array
        (
            [0] => stdClass Object
                (
                    [specific_exercise.distance] => 14
                )

            [1] => stdClass Object
                (
                    [specific_exercise.avg_pace] => 7.5
                )
        )
)

相反,我想把它转换成这个:

stdClass Object
(
    [details] => Array
        (
            [specific_exercise.distance] => 14
            [specific_exercise.avg_pace] => 7.5
        )

)

从json_decode()结构转换为更有效的PHP结构的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

如果您可以控制,那么更改JSON可能是更好的解决方案,例如

{
    "details":
    {
        "specific_exercise.distance" : "14",
        "specific_exercise.avg_pace" : "7.5"
    }
}

修改

然后你可以使用这个方法:

function parseJsonFormat($json)
{
    $json_object = json_decode($json);
    $details_result = array();
    foreach($json_object['details'] as $detail)
    {
         $details_result = array_merge($details_result, get_object_vars($detail));
    }
    $json_object['details'] = $details_result;
    return $json_object;
}

您可以进一步修改方法以适用于每个数组,而不仅仅是详细信息键。

答案 1 :(得分:2)

将多个关联子阵列拼凑在一起使用:

 call_user_func_array("array_merge", (array)$subarray)

在您的情况下,$subarray表示details,您将结果分配回来。

仅适用于数组,而不适用于对象,因此最好首先使用第二个参数指示json_decode