2015-04-28 3 views
2

Я делаю что-то глупое и не могу понять.json object to array не ссылающиеся значения

Я вытаскиваю данные настройки, хранящиеся в базе данных 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 параметров истинного функционировать 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

yep. работая с ответом от user3146300 - это был параметр, который необходимо было установить, чтобы заставить его преобразовать в ассоциативный массив в 'json_decode' – TH1981