2014-02-10 216 views
0

我有一個使用JSON對象和PHP的問題。 的Edited_Players JSON對象可以具有一個或多個子對象如下所示將json對象添加到數組php

這與2子對象

"Team_Updates": { 
    "Edited_Players": [ 
     { 
      "position": "flanker", 
      "last_name": "mowbrayfg", 
      "id": 3, 
      "first_name": "fchris", 
      "weight": "weight", 
      "height": "high" 
     }, 
     { 
      "id": 4, 
      "last_name": "gg", 
      "position": "gg", 
      "first_name": "ffgyvvyvy", 
      "height": "cttvyv", 
      "weight": "gg" 
     } 
    ] 
}, 

這與1個子對象:

Team_Updates": { 
    "Edited_Players": 
     { 
      "position": "flanker", 
      "last_name": "mowbrayfg", 
      "id": 3, 
      "first_name": "fchris", 
      "weight": "weight", 
      "height": "high" 
     } 
       } 

的問題是當我執行下面的代碼時,如果Edited_Players JSON對象的大小爲2,那麼for循環將執行兩次,這是正確的。但是如果Edited_Players JSON對象的大小爲1,則循環執行6次。

這是因爲如果Edited_Players> 1,那麼它由一個數組填充,但是如果= 1,則它只計算其中的單個對象。

如何更改以使代碼將{position,last_name,id,first_name,weight,height]看作1個對象?

if(isset($editedPlayersObj)){ 

    $epIDArray = array(); 
    $epFnameArray = array(); 
    $epSnameArray = array(); 
    $epHieghtArray = array(); 
    $epWeightArray = array(); 
    $epPosArray = array(); 

    for ($x=0; $x<count($editedPlayersObj); $x++) 
     { 
     $epFnameArray[$x] = $editedPlayersObj[$x]['first_name']; 
     $epSnameArray[$x] = $editedPlayersObj[$x]['last_name']; 
     $epIDArray[$x] = $editedPlayersObj[$x]['id']; 
     $epHieghtArray[$x] = $editedPlayersObj[$x]['weight']; 
     $epWeightArray[$x] = $editedPlayersObj[$x]['height']; 
     $epPosArray[$x] = $editedPlayersObj[$x]['position']; 

     // insert into database the above 
     } 
+0

這是更好地正確地重建源JSON。 –

+0

@u_mulder你能不能解釋一下? –

回答

2

問題在於構建的JSON。我認爲應該總是一個包裝一個或多個`Edited_Players「對象的數組,在你的第二種情況下沒有,你最終迭代提供的單個對象的屬性

如果你有在JSON無法控制,那麼你應該檢測值Edited_Players是否爲數組或相應的對象和工作吧。

+0

謝謝,即時通訊使用'is_array'方法,但當Edited_Players是對象時,它仍然返回true –

+0

'$ editedPlayersObj = $ updates ['Edited_Players'];'如果(is_array($ editedPlayersObj)){...' –

+0

@ChrisMowbray你在調用'json_decode()'時使用強制關聯數組的選項嗎?像'json_decode($ json,true)'?如果是這樣,你可能要考慮不使用這種方式,只有數字索引的數組才能被解碼爲數組,而對象表示被轉換爲對象而不是關聯數組。在這種情況下,該對象應該被解碼爲'stdClass' PHP對象。 –

2

如果我理解這個問題,那麼使用json_decode可能會有更好的運氣。這將允許您以對象的形式訪問每個返回值。