parse_ini_file问题

问题描述

| 我正在使用parse_ini_file()读取具有以下行的ini文件
[admin]
hide_fields[] = ctr_ad_headerImg
问题是它输出
[admin]
hide_fields = Array
有人可以帮我吗?如何像字符串一样读取\“ hide_fields [] \”? 最好的祝福 约里坎 我的代码是:
$ini_array = parse_ini_file($config_path,true);
//print_r($ini_array);
//echo $ini_array[\"default_colors\"][\"sitebg\"];
$ini_array[\"default_colors\"][\"sitebg\"]=\"#000000\";
write_PHP_ini($ini_array,$config_path);
我使用的功能
function write_PHP_ini($array,$file)
{
    $res = array();
    foreach($array as $key => $val)
    {
        if(is_array($val))
        {
            $res[] = \"[$key]\";
            foreach($val as $skey => $sval) $res[] = \"$skey = \".(is_numeric($sval) ? $sval : \'\'.$sval.\'\');
        }
        else $res[] = \"$key = \".(is_numeric($val) ? $val : \'\'.$val.\'\');
    }
    safefilerewrite($file,implode(\"\\r\\n\",$res));
}
//////
function safefilerewrite($fileName,$dataToSave)
{    if ($fp = fopen($fileName,\'w\'))
    {
        $startTime = microtime();
        do
        {            $canWrite = flock($fp,LOCK_EX);
           // If lock not obtained sleep for 0 - 100 milliseconds,to avoid collision and cpu load
           if(!$canWrite) usleep(round(rand(0,100)*1000));
        } while ((!$canWrite)and((microtime()-$startTime) < 1000));

        //file was locked so Now we can store information
        if ($canWrite)
        {            fwrite($fp,$dataToSave);
            flock($fp,LOCK_UN);
        }
        fclose($fp);
    }

}

解决方法

Parse_ini_file()
处理此类标识符。在读取ini文件时,它将正确地将它们转换为数组:
 print_r(parse_ini_string(\"hide_fields[] = ctr_ad_headerImg\"));
将产生:
Array
(
    [hide_fields] => Array
        (
            [0] => ctr_ad_headerImg
        )
可以在PHP中以“ 7”访问该条目。问题是您这次选择的ini文件输出功能无法理解
array
属性。 由于您可能对解决方法感兴趣,而不是使用适当的工具,因此请对您的ini数据应用此转换循环:
// foreach ($sections ...) maybe

foreach ($cfg as $key=>$value) {
    if (is_array($value)) {
         foreach ($value as $i=>$v) {
             $cfg[\"$key\".\"[$i]\"] = $v;
         }
         unset($cfg[$key]);
    }
}
然后保存。 编辑代码
function write_php_ini($array,$file)
{
    $res = array();
    foreach($array as $key => $val)
    {
        if(is_array($val))
        {
            $res[] = \"[$key]\";
            foreach($val as $skey => $sval) {
                if (is_array($sval)) {
                    foreach ($sval as $i=>$v) {
                        $res[] = \"{$skey}[$i] = $v\";
                    }
                }
                else {
                    $res[] = \"$skey = $sval\";
                }
            }
        }
        else $res[] = \"$key = $val\";
    }
    safefilerewrite($file,implode(\"\\r\\n\",$res));
}

//////
function safefilerewrite($fileName,$dataToSave)
{    
    file_put_contents($fileName,$dataToSave,LOCK_EX);    
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...