我正在使用parse_ini_file()来读取包含此行的ini文件:
[admin]
hide_fields[] = ctr_ad_headerImg
问题是它输出就像,
[admin]
hide_fields = Array
有人可以帮帮我吗?我怎么读“hide_fields []”就像一个字符串?
最诚挚的问候 Joricam
我的代码是:
$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);
}
}
答案 0 :(得分:2)
Parse_ini_file()
会处理此类标识符。它在读取ini文件时正确地将它们转换为数组:
print_r(parse_ini_string("hide_fields[] = ctr_ad_headerImg"));
将生成:
Array
(
[hide_fields] => Array
(
[0] => ctr_ad_headerImg
)
可以在PHP中以$cfg["hide_fields"][0]
访问该条目。问题是你这次选择的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);
}