2015-04-28 45 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