Я пытаюсь преобразовать свой массив в 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';
$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
}
Я предполагаю, что входящие данные выглядят так.
$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;
}