Конвертировать массив в JSON в правильном формате

1

Я пытаюсь преобразовать свой массив в JSON.

Мой JSON хранится в базе данных и позже будет декодирован для проверки разрешений.

Пример,

Как я хочу, чтобы он хранился в базе данных:

{ "admin": 1,
"create_posts": 1,
"edit_posts": 1,
"delete_posts": 1 }

Как он хранится сейчас:

{"0":"\"admin\": 1",
 "1":"\"create_posts\": 1",
 "2":"\"edit_posts\": 1",
 "3":"\"delete_posts\": 1"}

Мой код:

$check_list = $_POST['check_list'];
$list = array();

foreach($check_list as $key) {
     $key = '"' . $key .= '": 1';

     array_push($list, $key);
}

$json = json_encode($list, JSON_FORCE_OBJECT);

Как я могу сделать это так, чтобы он хранился в базе данных, как я хочу?

Я совершенно новичок в этом, поэтому любые подсказки вместо прямых ответов также очень ценятся!

ОБНОВИТЬ:

JSON-декодирование и проверка:

$permis = json_decode($permissions->permissions, true);

echo ($permis['admin'] == true) ? 'allowed' : 'disallowed';
  • 0
    Почему вы создаете новый массив? Просто закодируйте $ check_list.
  • 0
    Неплохо подмечено. Я изменю это.
Показать ещё 5 комментариев
Теги:
arrays

2 ответа

1
Лучший ответ
$arr = [ 'a', 'b', 'c' ];

echo json_encode(
    array_combine(
        $arr,
        array_fill(0, count($arr), 1)
    ),
    JSON_PRETTY_PRINT
);

Вывод:

{
    "a": 1,
    "b": 1,
    "c": 1
}
  • 0
    Ты гений! Спасибо вам большое!
0

Я предполагаю, что входящие данные выглядят так.

$incoming_data = "admin=1&create_posts=1&edit_posts=1&delete_posts=1";
$pairs = parse_str($incoming_data);

поэтому мы берем входящие пары и используем ключ $ в качестве индекса массива, чтобы вы не получали дополнительный элемент элемента массива.

$permissions = array();

foreach($pairs as $key => $value){
    $permissions[$key] = $value;
}

затем мы кодируем новый массив, чтобы получить JSON, который вы ищете.

print json_encode($permissions);

распечатает JSON следующим образом:

{ 
  "admin":"1", 
  "create_posts":"1", 
  "edit_posts":"1", 
  "delete_posts":"1" 
}

Главное - изменить код.

foreach($check_list as $key) {
    $list[$key] = 1;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню