2016-09-07 7 views
1

Ich bin bei der Erzeugung mehrdimensionaler Array aus String fest und ich brauche deine Hilfe. Dies ist die Zeichenfolge (json):Erzeuge multidimensionales Array aus der explodierten Zeichenkette

{ 
"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", 
} 

Jetzt muss ich die key durch „_“ explodieren und es mehrdimensionales Array umwandeln, dann am Ende muss ich den Wert einzustellen. Ausgabe sollte wie folgt sein:

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

Derzeit bekomme ich diese:

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" 
     } 
    } 
    }... 

Dies ist mein Code:

$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; 

Idee von dieser Antwort wurde: https://stackoverflow.com/a/8993400/1672261

+1

Bitte posten Sie Ihre JSON-Zeichenfolge. – Amy

+0

bitte posten Sie Ihre genaue JSON-Zeichenfolge –

+0

Es ist aktualisiert, es ist eigentlich eine Übersetzungsdatei für Angular, nur eine kurze – Alen

Antwort

1

In Ihr Code anstelle von array_push($results, $result); ersetzen Sie mit $results = array_merge_recursive($results, $result);

Die Ergebnisse werden

{ 
    "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" 
     } 
    } 
} 

sein, wie Sie nicht sicher, wie sie Sie API_OVERVIEW & API_OVERVIEW_CON1 behandeln möchten. Aber ich hoffe, dass dir das irgendwie hilft.

Auch etwas anderes versucht. Dies liefert auch die gleichen Ergebnisse

$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

Eigentlich kam ich eine Minute dazu vor :) Aber danke für die Antwort, ich werde diese Antwort akzeptieren – Alen