To work with this type of functionality, a recursive function is the easiest way to do it, for example:
JSON file:
{
"users": {
"mariana": "offline",
"joao": "online"
}
}
PHP function
function JSONDB($path, $method, $data, &$value = NULL){
// Separa todas as chaves
$path = explode('/', $path);
// Salva a primeira na variável $key e remove-a da variável $path
$key = array_shift($path);
// Junta todas as chaves em um novo path
$npath = implode('/', $path);
// Verifica se é GET e está na última chave
if ($method == 'GET' && count($path) === 0)
// Adiciona o valor na variável assinada $value
$value = $data[$key];
// Verifica se é SET e está na última chave
else if ($method == 'SET' && count($path) === 0)
// Seta o valor na chave atual
$data[$key] = $value;
// Verifica se a chave atual não está vazia e é um array
else if (!empty($data[$key]) && is_array($data[$key]))
// Desce um nivel no array passando $data[$key] e atualiza o retorno na chave
$data[$key] = JSONDB($npath, $method, $data[$key], $value);
// Nenhuma condição satisfeita, erro (provavelmente caminho errado)
// Ou dados incorretos
else
// Nada a fazer por aqui
$value = FALSE;
// Retorna os dados para serem salvos
return $data;
}
Use
// Arquivo com os dados JSON
$file = 'ususarios.json';
// Define método [GET ou SET]
$method = 'SET';
// Caminho para a propriedade
// IMPORTANTE> JSON é Case Sensitive ou seja, diferencia maiúscula de minúscula
// o caminho deve ser escrito da mesma forma como está no arquivo separados por /
$path = 'users/mariana';
// Valor a ser alterado caso o método seja GET
// Caso o método seja GET o retorno será colocado nessa variável,
// então basta definir a variável e passa-la no quarto parâmetro
$val = 'online';
// Pega os dados do json
$data = file_get_contents($file);
// Transforma do JSON em array
$json = json_decode( $data, true );
// Executa a função recursiva, todos os dados serão retornado
// caso o método seja GET o valor será colocado na variável do quarto parâmetro
$dados = JSONDB($path, $method, $json, $val);
// Salva caso seja SET
if ($method == 'SET')
$salva = file_put_contents("cofing.txt", json_encode($dados));
// Imprimindo os dados
echo '<style>pre{display:block; width:80%; margin: 20px auto;padding:10px;background-color:rgba(0,0,0,0.06);border-radius:5px;box-shadow:inset 2px 2px 5px rgba(0,0,0,0.2);}</style>';
echo '<pre>';
if ( $method == 'SET' ) {
echo $salvo ? 'Arquivo salvo...' : 'Erro ao salvar...';
} else {
// Somente exibir o valor da propriedade
// Obs, a variável $val é o quarto parâmetro passado na função
// que quando o método for GET, será onde o retorno do GET será armazenado
var_dump( $val );
}
echo '</pre>';
// Todos os dados
echo '<pre>';
var_dump($dados);
echo '</pre>';
Result
Observations:
This way of working with data is very primitive, that is, I'm just giving the initial step so that from here you can build your class with validation methods of input and output data, validation of file writing and etc. .
This type of functionality is very useful for saving settings such as connection to the database and so on. (But of course the file must be protected against external access.