Добавить элемент массива в файл

нужно в массив из файла list.php добавить запись по ключу

list.php

   return [
        'authorize' => [
            'account/profile',
            'account/settings',
        ],
        'guest' => [
            'account/register',
            'account/login',
            'admin/login',
        ],
        'admin' => [
            'admin/main',
        ],
    ];

Нужно к примеру по ключу 'admin' добавить еще одно значение 'admin/settings',

class Settings {

    static $cfg = null;

    public static function load(){
        static::$cfg = include "file.php";
        foreach(static::$cfg as $k => $v){
            if(!defined($k)){
                define($k, $v);
            }
        }
    }

    public static function set($key, $value){
        static::$cfg[$key] = $value;
    }

    public static function save(){
        $content = "<?php".PHP_EOL."\treturn\t".var_export(static::$cfg, true);

        file_put_contents("file.php", $content);
    }
}
Settings::load();
Settings::set('admin', 'admin/settings'); 
Settings::save();

Как сделать:

  1. что бы скрипт добавлял запись по ключу

  2. не удалял в конце ;


  1. что бы верно работало в методе set должно быть так:

static::$cfg[$key][] = $value;

  1. что бы не удаляло ; (точку из запятой) в конце массива, нужно:

file_put_contents("file.php", $content.";");


Ответы (1 шт):

Автор решения: MARSHAL

Предлагаю вам следующий вариант для решение данной проблемы:

Хранить массив (я так понял что вы с MVC боритесь) в файле list.php в JSON формате. Если потребуется получить данные или записать воспользуйтесь функциями ниже:

Получить массив из файла list.php

function get_list ($path) {
    if (!file_exists($path) return false;
    $json = file_get_contents($path);
    return json_decode($json, true);
}

Записать измененный массив в libs.php

function set_list ($path, $array) {
    file_put_content($path, json_encode($array));
}
→ Ссылка