2015-12-01 105 views
2

我正在構建一個流程圖(非常類似於Sankey圖表),但我在處理數據時遇到了一些麻煩。逗號分隔的步驟,具有相同的值的多個步驟

我從API調用中獲取JSON文件。我正在使用PHP腳本將JSON輸出存儲在MySQL數據庫中。

的問題是佈局,因爲它是現在:

('A, B, C, D, E, F', 123456), 
('A, B, C, D', 6543), 
('B, C', 94934), 

我需要什麼(我想單獨分割的每一步,但需要的價值爲每一步創建TE流程圖) 。

('A, B', 123456), 
('B, C', 123456), 
('C, D', 123456), 
('D, E', 123456), 
('E, F', 123456), 
('A, B', 6543), 
('B, C', 6543), 
('C, D', 6543), 
('B, C', 94934) 

JSON到數據庫

$json_data = file_get_contents($CALL); 
$json_data = str_replace("'","",$json_data); 
$array = json_decode($json_data,true); 
$sql_inserts = array(); 
foreach($array['reportitems']['reportitem'][0]['rows']['r'] AS $row) 
    { 
     $sql_inserts[] = "('".$row[c][0]."','".$row[c][1]."')"; 
    }; 
$sql = 'INSERT INTO flow (flow,number) VALUES '.implode(",",$sql_inserts); 
    if (mysqli_query($conn, $sql)) { 
      echo "Ok"; 
    } else {echo "<Error" . mysqli_error($conn) ;} 
mysqli_close($conn); 



輸出API調用 - JSON

{ 
    "reportitems": { 
    "@count": "1", 
    "reportitem": [ 
     { 
     "columns": { 
      "@count": "2", 
      "column": [ 
      { 
       "ctitle": "flow", 
       "type": "track", 
       "alignment": "left" 
      }, 
      { 
       "ctitle": "number", 
       "type": "integer", 
       "alignment": "right" 
      } 
      ] 
     }, 
     "title": "flow", 
     "statistics": { 
      "total": { 
      "c": [ 
       "", 
       "10813438" 
      ] 
      }, 
      "maximum": { 
      "c": [ 
       "", 
       "2482782" 
      ] 
      }, 
      "average": { 
      "c": [ 
       "", 
       "29" 
      ] 
      }, 
      "minimum": { 
      "c": [ 
       "", 
       "1" 
      ] 
      } 
     }, 
     "rows": { 
      "@count": "3", 
      "r": [ 
      { 
       "c": [ 
       "A, B, C, D, E, F", 
       "123456" 
       ] 
      }, 
      { 
       "c": [ 
       "A, B, C, D", 
       "6543" 
       ] 
      }, 
      { 
       "c": [ 
       "B, C", 
       "94934" 
       ] 
      } 
      ] 
     } 
     } 
    ] 
    } 
} 

我在哪裏需要解決這一問題?將JSON輸出寫入MySQL數據庫的腳本?或者從數據庫查詢sankey圖表(期望分離的格式)?

回答

2

你可以試試:

foreach($array['reportitems']['reportitem'][0]['rows']['r'] AS $row) 
{ 
    // EXPLODE TO GET INDIVIDUAL CHARACTERS 
    $explodedCharac = explode(',', $row[c][0]); 
    // LOOP THROUGH EACH CHARACTER 
    foreach($explodedCharac as $key => $charac) 
    { 
     // CHECK IF THIS IS NOT THE LAST CHARACTERS IN THE EXPLODED LIST 
     if(isset($explodedCharac[$key+1])) { 
      // PREPARE ARRAY WITH CURRENT AND NEXT CHARACTER, IF THIS IS NOT THE LAST CHARACTER IN THE EXPLODED LIST 
      $sql_inserts[] = "('".$explodedCharac[$key].", ".$explodedCharac[$key+1]."','".$row[c][1]."')"; 
     } 
    } 

}; 
+0

這是偉大的東西!這總比你想象的要容易。 – Glarp

+0

非常真實。有時候,棘手的問題似乎很容易,而且很容易解決。:) –