2015-04-28 80 views
2

我正在做一些愚蠢的事情,無法弄清楚。json對象數組沒有引用值

我把存儲在mysql數據庫中的設置細節作爲json對象,然後將它們轉換爲數組。

$settings = (array)json_decode($user['settings']);

我可以print_r()此爲以下內容:

Array 
(
    [2] => 1 
    [1] => 1 
) 

好爲止。

如果我嘗試更新的設置之一,因此,例如改變1等於0,我得到這個:

Array 
(
    [2] => 1 
    [1] => 1 
    [1] => 0 
) 

我這樣做只是這一點:

$settings[1] = 0;

最終我試圖取消設置值,如果它是0,然後更新數據庫。它不是更新值,而是創建一個新條目,並且使用unset不會執行任何操作。

我在做什麼錯?參考

完整的代碼片段:

$settings = (array)json_decode($user['settings']); 
print_r($settings); 

if(isset($form['usr'][$user['id_user']])){ 
    $settings[1] = 1; 
}else{ 
    $settings[1] = 0; 
    unset($settings[1]); 
} 

print_r($settings); 

回報:

Array 
(
    [2] => 1 
    [1] => 1 
) 
Array 
(
    [2] => 1 
    [1] => 1 
    [1] => 0 
) 

回答

1

嗨你能添加secent PARAM真正發揮作用json_decode這樣的:

$settings = json_decode($user['settings'], true); 

我覺得這個修復問題

0

對於其中之一,我在代碼中看到一個語法錯誤。這是打字錯誤還是它是你運行的實際代碼的一部分?此行未設置 - >

unset($settings[1];) 

聲明終止「;」應該在外面,因爲這

unset($settings[1]); 

這是我已經嘗試過。 假設$用戶[ '設置']形成這樣

$user['settings'] = array('2' => 1, '1' => 1); 

並轉向JSON對象以這種方式

json_encode($user['settings']); 

然後將以下代碼應該工作

$settings = (array)json_decode($user['settings']); 
print_r($settings); 

if(... true) 
{ 
    $settings[1] = 1; 
} 
else 
{ 
    $settings[1] = 0; 
    unset($settings[1]); 
} 

print_r($settings); 

應該輸出

Array 
(
    [2] => 1 
    [1] => 0 
) 

Array 
(
    [2] => 1 
) 
+0

感謝您指出錯字;我輸入得太快並修改。 – TH1981

+0

你現在有這個工作嗎? – geoffreybans

+0

是的。使用user3146300的答案 - 這是需要設置爲強制它轉換爲json_decode' – TH1981