2017-12-08 3 views
0

Ich habe ein multidimensionales Array, das aus 3 Arrays besteht. Im folgenden sehen Sie mein Minimum runnable Beispiel:Erstellen Sie JSON-Datei aus einem mehrdimensionalen Array

<?php 

$array1 = array("Bitcoin", "Ethereum", "Bitcoin Cash"); 
$array2 = array("BTC", "ETH", "BTC"); 
$array3 = array("10000", "3000", "6666"); 


//Multi Dimensional Array 
$multi = array($array1, $array2, $array3); 
print_r($multi); 

foreach($multi as $k =>$a){ 
    $multi[$k] = json_decode(json_encode($a)); 
} 

print_r($multi); 

// $json_data = json_encode($multi); 
file_put_contents('data/myfile.json', $multi);  

Allerdings erhalte ich die folgende Ausgabe in meiner Ausgabedatei:

ArrayArrayArray 

Irgendwelche Vorschläge, wie die Daten wie folgt zu erhalten:

{ 
"Bitcoin", 
"BTC", 
"10000" 
}, 
{ 
"Ethereum", 
"ETH", 
"3000" 
}, 
{ 
"Bitcoin Cash", 
"BTC", 
"6666" 
}, 
+0

Enthalten alle drei Arrays immer die gleiche Menge an Elementen? –

+1

Btw, der JSON, den du willst, ist ungültig. '{}' sind für Objekte '{key: 'value', key2: 'value2', ...}' while '[]' ist für Arrays '['item1', 'item2', ...]' –

Antwort

1

First off, Ihre erwartete Ergebnis nicht gültig json ist. Es sollte Arrays [] statt {} sein.

Unten ist, wie Sie die Daten wie gewünscht formatieren können.
geht jedoch davon aus, dass die drei Arrays immer gleich lang sind:

$array1 = array("Bitcoin", "Ethereum", "Bitcoin Cash"); 
$array2 = array("BTC", "ETH", "BTC"); 
$array3 = array("10000", "3000", "6666"); 

$new = []; 

// Restructure your array to get one item from each array 
foreach ($array1 as $index => $value) { 
    $new[] = [ 
     $value, 
     $array2[$index], 
     $array3[$index] 
    ]; 
} 

$multi = json_encode($new); 

Dies würde produzieren Sie das gewünschte Format, sondern in gültigem JSON-Format:

[ 
    [ 
     "Bitcoin", 
     "BTC", 
     "10000" 
    ], 
    [ 
     "Ethereum", 
     "ETH", 
     "3000" 
    ], 
    [ 
     "Bitcoin Cash", 
     "BTC", 
     "6666" 
    ] 
] 

Demo: https://3v4l.org/39kuA

1
{ 
"Bitcoin", 
"BTC", 
"10000" 
}, 
{ 
"Ethereum", 
"ETH", 
"3000" 
}, 
{ 
"Bitcoin Cash", 
"BTC", 
"6666" 
}, 

Ist kein gültiges JSON-Format. '{' Und '}' bedeutet, dass es die Karte (Objekt) ist, so muß es 'key: value' seine Zeilen wie:

{ 
0: "Bitcoin" 
} 

Proper JSON für Array verwendet '[' und ']'.


<?php 
$array1 = array("Bitcoin", "Ethereum", "Bitcoin Cash"); 
$array2 = array("BTC", "ETH", "BTC"); 
$array3 = array("10000", "3000", "6666"); 

//Multi Dimensional Array 
$multi = array(); 
foreach($array1 as $key => $v) { 
    $multi[] = [$array1[$key], $array2[$key], $array3[$key]]; 
} 

file_put_contents('data/myfile.json', json_encode($multi)); 

Produziert:

[["Bitcoin","BTC","10000"],["Ethereum","ETH","3000"],["Bitcoin Cash","BTC","6666"]] 

Formatierte:

[ 
    [ 
     "Bitcoin", 
     "BTC", 
     "10000" 
    ], 
    [ 
     "Ethereum", 
     "ETH", 
     "3000" 
    ], 
    [ 
     "Bitcoin Cash", 
     "BTC", 
     "6666" 
    ] 
] 
+0

Das ist jedoch nicht das Ergebnis, das der OP verlangt. –

+0

Tags sind 'php json multidimensional-array', nicht 'php sonderbar-format miltidimensional-array'. Er wollte PHP zu JSON-Arrays formatieren, also tat ich das. Aktualisierte Antwort mit Informationen zum richtigen Format. – JerzySBG

+0

Das ist nicht was ich meine. Ich bin 100% Spiel auf dem ungültigen json. Aber sieh dir die Daten an. Das OP möchte die drei Arrays kombinieren. –

Verwandte Themen