替换文件中的数组值

时间:2015-10-02 08:02:03

标签: php

我正在测试替换文件中特定数组的值。我只有一个问题。因为如果它具有相同的值,它将覆盖仅第一个值。但我想要具体的一个。

我的档案:

<?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;。所以我想知道如何替换我在参数中指定的值。

感谢。

2 个答案:

答案 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']);