我正在测试替换文件中特定数组的值。我只有一个问题。因为如果它具有相同的值,它将覆盖仅第一个值。但我想要具体的一个。
我的档案:
<?php
$config = [
'test1' => 'hello',
'test2' => 'hello',
'test3' => 'hello'
];
?>
我的职能:
public function UpdateConfig($search, $replace)
{
$file = 'App/Config.php';
$get = file_get_contents($file);
$f = preg_quote($search, '/');
$r = preg_replace('/' . $f . '/', $replace, $get, 1);
file_put_contents($file, $r);
}
我这样使用它:
$this->UpdateConfig($this->config['test2'], 'replaced');
问题是取代&#34; test2&#34;的价值。它取代了&#34; test1&#34;的价值。因为它来自&#34; test2&#34;。所以我想知道如何替换我在参数中指定的值。
感谢。
答案 0 :(得分:0)
目前,您正在尝试替换该值,这意味着它将改变该给定值的第一次出现。由于所有值都相同,脚本将更改第一个“test1”。
最好的方法是实际查看数组的“键”,然后更改值。这样,您可以确保始终获取正确的内容。
我稍稍重写了你的脚本,看起来像这样。
class Config
{
private $_configPath = 'App/Config.php';
private $_config = null;
private function _loadConfig()
{
// If config is not already loaded. Load it up
if( is_null( $this->_config ) || !is_array($this->_config) )
{
include($this->_configPath);
if( isset($config) && is_array($config) )
{
$this->_config = $config;
} else {
$this->_config = [];
}
}
}
private function _saveConfig()
{
// Export the php-array to a string, and rework the file.
$string = '<?php $config = ' . var_export( $this->_config, true );
file_put_contents($this->_configPath, $string);
}
public function UpdateConfig($key, $value)
{
// Load the configuration
$this->_loadConfig();
// Alter the config
$this->_config[$key] = $value;
// Save the config
$this->_saveConfig();
}
}
然后会像这样使用。
// Used like this
$config = new Config();
$config->UpdateConfig("test2", "FooBar");
请记住在Config.php文件上拥有适当的权限,以便写入成功。
最好的。 纳斯
答案 1 :(得分:0)
有很多方法可以做到这一点其中一个是在你的文件中$ config present make $ config GLOBALS以便将它放入一个函数中,所以配置文件将是
my file:
<?php
$GLOBALS['config'] = [
'test1' => 'hello',
'test2' => 'hello',
'test3' => 'hello'
];
?>
和强>
像这样使用它:
$this->UpdateConfig(array_search($GLOBALS['config']['test2'],$GLOBALS['config']), 'replaced');
我的职能:
public function UpdateConfig($search, $replace)
{
foreach ($GLOBALS['config'] as $key => $value) {
if($key==$search){
$GLOBALS['config'][$key] = $replace;
}
}
}
echo '<pre>';print_r($GLOBALS['config']);