2013-02-10 74 views
-1

以下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結構的最佳方式是什麼?

+1

您必須手動迭代和替換內容。 – moonwave99 2013-02-10 17:44:11

回答

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; 
} 

您可以進一步修改該方法以適用於每個數組,而不僅僅是詳細信息密鑰。

+0

是的,這正是我想要做的。可悲的是,我有一些技術上的原因,我不能。 :( – ken 2013-02-10 17:51:18

+0

謝謝@sensor,你的編輯工作完美。 – ken 2013-02-10 19:17:24

2

猛撞在一起的多個關聯子陣列使用:

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

$subarray意味着你的情況details,在那裏你分配結果返回。

只適用於數組,不適用於對象,因此最好先指示json_decode,然後再使用第二個參數。