PHP Добавить к ключу в INI-файл - PullRequest
0 голосов
/ 07 июня 2019

У меня есть INI-файл, который я должен добавить в PHP Forms. На данный момент у меня есть рабочий код для создания раздела, если он не существует, и замены значения, если он существует. То, с чем я борюсь, это добавление.

Например, сейчас это мой INI-файл.

[Persons]
names = "travis", "jackson"
color = "blue"

На стороне PHP у меня есть форма для вставки раздела, ключа и значения

Скажите, что секция ввода Person, клавиша color и значение red.

Новый файл INI, который я хочу, должен быть

[Persons]
names = "travis", "jackson"
color = "blue", "red"

Исходный код, который я пытаюсь изменить: ( взят из этой статьи стека )

function config_set($config_file, $section, $key, $value) {
    $config_data = parse_ini_file($config_file, true);
    $config_data[$section][$key] = $value;
    $new_content = '';
    foreach ($config_data as $section => $section_content) {
        $section_content = array_map(function($value, $key) {
            return "$key=$value";
        }, array_values($section_content), array_keys($section_content));
        $section_content = implode("\n", $section_content);
        $new_content .= "[$section]\n$section_content\n";
    }
    file_put_contents($config_file, $new_content);
}

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

РЕДАКТИРОВАТЬ: Попытки вещей, которые я пытался

Это сделало ноль изменений в INI-файл до изменения

function config_set($config_file, $section, $key, $value) {
    $config_data = parse_ini_file($config_file, true);
    $config_data[$section][$key] = $value;
    $new_content = "[$section]\n$value";
    foreach ($config_data as $section => $section_content) {
        $section_content = array_map(function($value, $key) {
            return "$key=$value";
        }, array_values($section_content), array_keys($section_content));
        $section_content = implode("\n", $section_content);
        $new_content .= "\n$section_content\n";
    }
    file_put_contents($config_file, $new_content);
 }

Это сломало страницу

function config_set($config_file, $section, $key, $value) {
    $config_data = parse_ini_file($config_file, true);
    $config_data[$section][$key] = $old_val;
    $new_content = '';
    foreach ($config_data as $section => $section_content) {
        $section_content = array_map(function($value, $key) {
            return "$key=$old_val, $value";
        }, array_values($section_content), array_keys($section_content));
        $section_content = implode("\n", $section_content);
        $new_content .= "[$section]\n$section_content\n";
    }
    file_put_contents($config_file, $new_content);
 }

1 Ответ

1 голос
/ 07 июня 2019

Вы можете добавить это условие, чтобы проверить, есть ли значение внутри «цвета» (ключевой раздел), и соответственно добавить новое значение:

if (empty($config_data[$section][$key])) {
    $config_data[$section][$key] = $value;
} else {
    $config_data[$section][$key] .= ',' . $value;
}   

Полный код:

function config_set($config_file, $section, $key, $value) {
    $config_data = parse_ini_file($config_file, true);
    if (empty($config_data[$section][$key])) {
        $config_data[$section][$key] = $value;
    } else {
        $config_data[$section][$key] .= ',' . $value;
    }    
    $new_content = '';
    foreach ($config_data as $section => $section_content) {
        $section_content = array_map(function($value, $key) {
            return "$key=$value";
        }, array_values($section_content), array_keys($section_content));
        $section_content = implode("\n", $section_content);
        $new_content .= "[$section]\n$section_content\n";
    }
    file_put_contents($config_file, $new_content);
}
...