2017-03-15 24 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]; 
}