2013-02-26 66 views
0

我有一個包含多個書籍的數組。我將每個書籍元素都以其唯一的ID作爲其中的關鍵字。我正在努力從此生成正確的JSON。如何將此多維數組轉換爲正確的JSON與PHP?

當我json_encode它只是產生每個子陣列JSON不是關鍵組的元素,但通過陣列他們在陣列上。

這是我的多維數組

$booksarray = array("book title" => array(), "book isbn" => array(), "book borrowedcount" => array()); 

完全林丟了怎麼弄出來的元素每個子陣列,然後將它們組合在一起,使它們的輸出類似,

{"results": 
{"course": "CC120", "books": 
    { "book": 
    [{"id": "12345", "title": "javascript", "isbn": "123456789", "borrowedcount": "45"}] } } 

我有XML outputing爲FOLL OWS

<results> 
<course>cc120</course> 
    <books> 
    <book id="9876" title="html" isbn="0000" borrowedcount="56"> 
    <book id="12345" title="javascript" isbn="123456789" borrowedcount="45"> 
    <book id="222" title="php5" isbn="55555555" borrowedcount="22"> 
    <book id="23788" title="XML" isbn="99988877" borrowedcount="5"> 
    </books> 
</results> 

任何幫助,將不勝感激

+0

是否'json_encode()'不工作? http://php.net/manual/en/function.json-encode.php – 2013-02-26 17:03:27

+3

最簡單的方法是將php數組轉換爲正確的格式,然後執行json_encode。 – jchapa 2013-02-26 17:03:34

+0

你能告訴我們子陣列嗎? – crush 2013-02-26 17:03:47

回答

2

陣列轉換成所需的格式,然後json_encode()它:

$newArray = array(); 

foreach($booksarray["book title"] as $key => $title) 
{ 
    $newArray[] = array(
     'id' => $key, 
     'title' => $title, 
     'isbn' => $booksarray["book isbn"][$key], 
     'borrowedcount' => $booksarray["book borrowedcount"][$key] 
    ); 
} 

echo json_encode($newArray); 
+1

更好地使用ISBN作爲循環的「權威」來源,我認爲。 – prodigitalson 2013-02-26 17:09:04

+0

謝謝你完美的工作。我的數組知識絕對需要工作,但非常感謝您的答案! – 2013-02-26 17:16:13

+0

@NathanBarton沒問題:) – MrCode 2013-02-26 17:16:47

1

它看起來像你的陣列是不是在格式,您希望它是在第一。一旦你的php數組與你想要的json在同一個結構中,json_encode就可以工作。

例如

$resultsArray = array(
    "results" => array(
     "course" => "CC120", 
     "books" => array(
      "book" => array(
       "id" => "12345", 
       "title" => "javascript" 
       ) 
      ) 
     ) 
    ); 

$strJson = json_encode($resultsArray); 
0

我認爲這個問題可能與您構建數組的方式有關。你能改變它嗎?

如下我建議一個數組結構:

$booksarray = array(
    "9876" => array(
     "title" => "html", 
     "isbn" => "0000", 
     "borrowedcount" => "56" 
    ), 
    "12345" => array(
     "title" => "javascript", 
     "isbn" => "123456789", 
     "borrowedcount" => "45" 
    ) 
); 

json_encode()應該然後在格式輸出這個你想要的。

E.g.

{"9876":{"title":"html","isbn":"0000","borrowedcount":"56"},"12345":{"title":"javascript","isbn":"123456789","borrowedcount":"45"}} 
+0

我誤讀了你想要的輸出格式,jchapa的迴應可能是最簡單的方法。 – Sean 2013-02-26 17:10:20