2016-09-07 51 views
1

我被困在生成字符串多维数组中,我需要你的帮助。 这是字符串(JSON):从爆炸字符串生成多维数组

{ 
"API_OVERVIEW" : "Overview", 
"API_OVERVIEW_CON1" : "API v1 offers a simple REST API to retrieve information about our markets. The API responses are JSON encoded arrays. Please be aware that calls to the API are rate limited to 10 requests per second, any requests exceeding this rate will be met with a HTTP 503 response.", 
"API_REFERENCE" : "API Reference", 
"API_MARKET_SUMMARY" : "Market Summary", 
"API_MARKET_STATS" : "Market Stats", 
"API_MARKET_TRADES" : "Market Trades", 
"API_MARKET_ORDERS" : "Market Orders", 
"API_MARKET_CHARTDATA" : "Market Chart Data", 
} 

现在我需要通过“_”爆炸的key并将其转换为多维数组,然后在最后,我需要设置的值。 输出应该是这样的:

"API" => 
    [ 
     "MARKET" => 
      ["SUMMARY" => "Market Summary"], 
      ["STATS" => "Market STATS"] 
      ... 
    ] 
"ANOTHER STRING" => 
    [ 
     .... 
    ] 

目前,我得到这个:

array(1) { 
    ["API"]=> 
    array(1) { 
     ["MARKET"]=> 
     array(1) { 
     ["SUMMARY"]=> 
     string(14) "Market Summary" 
     } 
    } 
    } 
    [8]=> 
    array(1) { 
    ["API"]=> 
    array(1) { 
     ["MARKET"]=> 
     array(1) { 
     ["STATS"]=> 
     string(12) "Market Stats" 
     } 
    } 
    }... 

这是我的代码:

$results = []; 
foreach($data as $key => $value){ 
    $result = []; 
    $exploded = explode('_', $key); 
    $path = &$result; 

    $counter = 1; 
    foreach($exploded as $explodedpart){ 
     if(!array_key_exists($explodedpart, $path)){ 
      if($counter == count($exploded)){ 
       $path[$explodedpart] = $value; 
      }else{ 
       $path[$explodedpart] = array(); 
      } 
     } 
     $path = &$path[$explodedpart]; 

     $counter++; 
    } 

    array_push($results, $result); 
} 

return $results; 

理念从这个答案采取:https://stackoverflow.com/a/8993400/1672261

+1

请发布您的json字符串。 – Amy

+0

请发布您的精确json字符串 –

+0

它已更新,它实际上是Angular的翻译文件,只是一个短的文件 – Alen

回答

1

在您的代码取代array_push($results, $result);替换为$results = array_merge_recursive($results, $result);

结果将是

{ 
    "API":{ 
     "OVERVIEW":{ 
     "0":"Overview", 
     "CON1":"API v1 offers a simple REST API to retrieve information about our markets. The API responses are JSON encoded arrays. Please be aware that calls to the API are rate limited to 10 requests per second, any requests exceeding this rate will be met with a HTTP 503 response." 
     }, 
     "REFERENCE":"API Reference", 
     "MARKET":{ 
     "SUMMARY":"Market Summary", 
     "STATS":"Market Stats", 
     "TRADES":"Market Trades", 
     "ORDERS":"Market Orders", 
     "CHARTDATA":"Market Chart Data" 
     } 
    } 
} 

正如你看到的不知道你想怎么处理API_OVERVIEW & API_OVERVIEW_CON1。但我希望这会以某种方式帮助你。

也尝试了一些不同的东西。这也输出相同的结果

$results = array(); 

foreach($data as $key => $value) { 
    // Get all the keys 
    $keyParts = explode('_', $key); 

    // Make a JSON string 
    // Like this {"A" : { "B" : "c" } } 
    $jsonStr = '{"'; // Open brackets 
    $jsonStr .= implode('":{"', $keyParts); 
    $jsonStr .= '":"'.$value.'"'; // End of the str 

    // Close brackets 
    // No of close brackets = No of keys 
    for($i = 0; $i < count($keyParts); $i++) { 
     $jsonStr .= "}"; 
    } 

    // Convert the JSON string into array 
    $tmpResults = json_decode($jsonStr, true); 

    // Merge into final results 
    $results = array_merge_recursive($results, $tmpResults); 
} 
+0

其实我想到了这一分钟前:)但谢谢你的回答,我会接受这个答案 – Alen