2014-03-19 52 views
0

我有此數組:PHP數組糾正JSON格式

$users = Array 
(
[Gareth] => Array 
    (
     [25732] => 180 
     [25689] => 2310 
     [25760] => 
     [25759] => 
     [25758] => 
     [25728] => 
     [25734] => 
    ) 
[Adam] => Array 
    (
     [25732] => 
     [25689] => 
     [25760] => 
     [25759] => 
     [25758] => 420 
     [25728] => 60 
     [25734] => 
    ) 
[Cennydd ] => Array 
    (
     [25732] => 
     [25689] => 
     [25760] => 
     [25759] => 
     [25758] => 
     [25728] => 
     [25734] => 1035 
    ) 
) 

它有工作,他們已經花了上以分鐘爲單位的工作時間的IDS用戶。

我需要使用highcharts輸出此數據,因此它需要使用Json格式。

目前,使用json_encode,它返回:

{ "Gareth": 
    { 
    "25732":180,"25689":2310,"25760":null,"25759":null,"25758":null,"25728":null,"25734":null 
    }, 
    "Adam Jukes": 
    { 
    "25732":null,"25689":null,"25760":null,"25759":null,"25758":420,"25728":60,"25734":null 
    }, 
    "Cennydd": 
    { 
    "25732":null,"25689":null,"25760":null,"25759":null,"25758":null,"25728":null,"25734":1035 
    } 
} 

但我需要這個格式:

[{ 
    "name": 'Gareth ', 
    "data": [180, 2310,null, null, null,null, null] 
    }, 
    { "name": 'Adam', 
    "data": [null, null, null,null,420, 60, null] 
    },{ 
    "name": 'Cennydd', 
    "data":[null, null , null, null, null,null, 1035 ] 
    }] 
}] 

但我似乎無法弄清楚。 我是否需要使用foreach以正確的格式分隔並創建新陣列?

+1

? –

+0

您必須將php數組轉換爲所需的格式,然後將其編碼爲JSON – hindmost

+0

您必須遍歷數據並從中重新格式化一個新數組......還有什麼? –

回答

2

最好的方式來得到你想要將修改您找回您$users陣列的方式是什麼,但如果你不能,這裏將是方式對其進行格式化,以適應你的需要:

$new_users = array(); 

foreach ($users as $user => $data) { 
    $new_users[] = array(
     'name' => $user, 
     'data' => array_values($data) 
    ); 
} 

echo json_encode($new_users); 
+0

@Shamrockonov解釋'幾乎'。我期望我的答案可能有所幫助 – Steve

+0

這幾乎就是我所追求的,但是,在「數據」數組中,我需要排除鍵並只是具有值。 Eg {「name」:「Gareth Cole」,「data」:{「25732」:180,「25689」:2310,「25760」:null,「25759」:null,「25758」:null,「25728」 :「null,」25734「:null}}」 變成 {「name」:「Gareth Cole」,「data」:{180,:2310,null,null,null,null,null}}「 – Shamrockonov

+0

@Shamrockonov yup ,這麼認爲 – Steve

0

首先,您需要在將數組編碼爲JSON後對其進行格式化。

$result = array(); 
foreach($users as $k => $v) { 
     $result[] = array(
     'name' => $k, 
     'data' => $v 
     ); 
} 

最後

echo json_encode($result); 
+0

你爲什麼使用兩個循環? –

+0

因爲您使用數組陣列 – wrivas

+0

而且?通過'foreach',不需要遍歷第一個和第二個數組。你可以只用一個循環來完成。 –

1

可以itterate陣列並用array_values獲得您所需要的格式:你在哪裏得到的第一陣列

$fixed=array(); 
foreach ($users as $k => $v) { 
    $fixed[]=array('name'=>$k, 'data'=>array_values($v)); 
} 

echo json_encode($fixed); 
+0

這也是我一直在尋找,只是沒有看到你的答案第一。不管怎麼說,還是要謝謝你。非常感激! – Shamrockonov