2014-03-19 48 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