2017-03-15 71 views
3

我有一个数组名为$ paises:元素添加到阵列中的特定格式

Array 
(
    [0] => Array 
     (
      [life_sciences] => Array 
       (
        [0] => Array 
         (
          [value] => Life Sciences 
         ) 

        [1] => Array 
         (
          [value] => 226 
         ) 

        [2] => Array 
         (
          [value] => 433 
         ) 

        [3] => Array 
         (
          [value] => 816 
         ) 


       ) 
      [telecom] => Array 
       (
        [0] => Array 
         (
          [value] => Telecom 
         ) 

        [1] => Array 
         (
          [value] => 10 
         ) 

        [2] => Array 
         (
          [value] => 20 
         ) 

        [3] => Array 
         (
          [value] => 30 
         ) 


       ) 
     ) 
) 

我需要用JSON格式完全一样另一个数组转换:

{ 
    "dataset": [ 
     { 
      "seriesname": "Life Sciences", 
      "data": [{"value": "226"}, {"value": "433"}, {"value": "816"}] 
     }, 
     { 
      "seriesname": "Telecom", 
      "data": [{"value": "10"}, {"value": "20"}, {"value": "30"}] 
     }, 
     . 
     . 
     . 
    ] 
} 

我在做什么返回一个错阵列形式:

$chart = array(); 

for ($i=0; $i < count($paises); $i++) { 

     // here i get the value from index 0 
     $chart["dataset"][]['seriesname'] = $paises[$i]['life_sciences'][0]['value']; 

     // Here i remove the index 0 and reaorder the array indexes 
     unset($paises[$i]['life_sciences'][0]); 
     array_splice($paises[$i]['life_sciences'], 1, 1); 

     // Here i get all values 
     $chart["dataset"][]['data'] = $paises[$i]['life_sciences']; 

} 

结果:

{ 
    "dataset": [ 
     { 
      "seriesname":"Life Sciences" 
     }, 
     { 
      "data":[{"value":"226"},{"value":"816"},{"value":"1098"}] 
     }, 
     { 
      "seriesname":"Telecom" 
     }, 
     { 
      "data":[{"value":"10"},{"value":"20"},{"value":"30"}] 
     }, 
     . 
     . 
     . 
    ] 
} 

注意 “SERIESNAME” 分离 “数据”:

{ "seriesname":"Life Sciences" }, { "data":[{"value":"226"},...] } 

但我需要的是:

{ "seriesname":"Life Sciences" , "data":[{"value":"226"},...] } 

我怎样才能做到这一点的正确方法?

########## EDIT 1

我用:

$chart = array(); 

for ($i=0; $i < count($paises); $i++) { 

     $chart["dataset"][$i]['seriesname'] = $paises[$i]['life_sciences'][0]['value']; 
     $chart["dataset"][$i]['data'] = $paises[$i]['life_sciences']; 

     $chart["dataset"][$i]['seriesname'] = $paises[$i]['telecom'][0]['value']; 
     $chart["dataset"][$i]['data'] = $paises[$i]['telecom']; 

} 

但只返回了 “电信” 元素,而忽略了 “life_sciences”

回答

0

试试这个重新格式化阵列。

<?php 

$json = '{ 
    "dataset": [ 
     { 
      "seriesname": "Life Sciences", 
      "data": [{"value": "226"}, {"value": "433"}, {"value": "816"}] 
     } 
    ] 
}'; 

$data = json_decode($json)->dataset; 

foreach ($data as $series) { 
    $tempArr = Array(); 
    foreach ($series->data as $value) { 
     array_push($tempArr, $value); 
    } 
    $series->data = $tempArr; 
} 

print_r($data); 


?> 

访问您的数据:

$data->data 

或者speries名称:

$data->seriesname 
1

[]运营商创建每次使用它的时候一个新的数组。所以,当你这样做:

$chart["dataset"][]['seriesname'] = $paises[$i]['life_sciences'][0]['value']; 

要追加一个新的元素,当你这样做:

$chart["dataset"][]['data'] = $paises[$i]['life_sciences']; 

要追加另一个新元素。您可以在同一添加他们两个:

$char["dataset"][] = [ 
    "seriesname" => ... 
    "data" => ... 
]; 

或明确指定新的索引:

$chart["dataset"][$i]['seriesname'] = ... 
$chart["dataset"][$i]['data'] = ... 
+0

感谢亚历克斯,但对我没有工作,我编辑的新问题的问题 – Eduardorph

0
$chart["dataset"][] = array(
    "seriesname" => $paises[$i]['life_sciences'][0]['value'], 
    "data" => array_slice($paises[$i]['life_sciences'], 1) 
); 

我认为这将是适当的循环体

编辑1

您的版本后,我想应用类似的东西

$k = array_keys($paises[0]); // get array of keys names 
for ($i=0; $i < count($k); $i++) { // iterate key names 
    $chart["dataset"][] = array(
     "seriesname" => $paises[0][$k[$i]][0]['value'], 
     "data" => array_slice($paises[0][$k[$i]], 1) // array without first element 
    ); 
} 

用代码片段播放以形成您的解决方案。

如果需要,再添加一个外部循环来迭代$paises

0

您可以使用array_shift()采取数组的第一个元素(从阵列中删除):

function transformPaisesArray(array $paises): array 
{ 
    $transformedPaisesArray = []; 

    foreach ($paises[0] as $series) { 

     // Take the first element from the array. 
     $name = array_shift($series)['value']; 
     // Add this first element and the rest as a new record to the target array. 
     $transformedPaisesArray[] = [ 
      'seriesname' => $name, 
      'data' => $series 
     ]; 
    } 

    // Wrap everything into the dataset field. 
    return ['dataset' => $transformedPaisesArray]; 
}