Php 将数组转换为.ini文件

Php 将数组转换为.ini文件,php,arrays,ini,laravel,Php,Arrays,Ini,Laravel,我需要将.ini文件解析为数组,然后更改数组的值并将其导出到相同的.ini文件。 我设法读取了文件,但没有找到任何简单的方法将其写回。 有什么建议吗 示例.ini文件: 1=0; 2 = 1372240157; // 时间戳。 如何使用php内部函数 为了写回.ini文件,您需要创建自己的函数,因为PHP除了用于读取(可在此处找到)之外,没有现成的函数 可能将多维数组封装到.ini-语法兼容字符串的函数示例如下所示: 函数arr2ini(数组$a,数组$parent=array()) {

我需要将
.ini
文件解析为数组,然后更改数组的值并将其导出到相同的
.ini
文件。 我设法读取了文件,但没有找到任何简单的方法将其写回。 有什么建议吗

示例
.ini
文件:

1=0;
2 = 1372240157;    // 时间戳。

如何使用php内部函数

为了写回
.ini
文件,您需要创建自己的函数,因为PHP除了用于读取(可在此处找到)之外,没有现成的函数

可能将多维数组封装到
.ini
-语法兼容字符串的函数示例如下所示:

函数arr2ini(数组$a,数组$parent=array()) { $out=''; foreach($a为$k=>$v) { if(is_数组($v)) { //分段案例 //将所有部分合并到一个数组中。。。 $sec=array\u merge((array)$parent,(array)$k); //将节信息添加到输出中 $out.='['.join('.',$sec)。']'.PHP_EOL; //递归遍历更深的 $out.=arr2ini($v,$sec); } 其他的 { //普通键->值大小写 $out.=“$k=$v”.PHP\u EOL; } } 退回$out; } 您可以这样测试它:

$x=[
“第1节”=>[
'key1'=>'value1',
'key2'=>'value2',
“小节”=>[
'子键'=>'子值',
“进一步”=>5],
'进一步2'=>['b'=>-5]]];
echo arr2ini($x);
(请注意,短数组语法仅在PHP 5.4+之后才可用。)


还要注意,它不会保留问题中出现的评论。当软件(而不是人工)更新文件时,没有简单的方法可以记住它们。

RR的答案有效,我添加了一个更改

在else语句中

//plain key->value case
$out .= "$k=$v" . PHP_EOL;
换成

//plain key->value case
$out .= "$k=\"$v\"" . PHP_EOL;
通过在值周围加“圈”,INI中可以有较大的值,否则parse_INI_*函数将出现问题


我对提供的功能进行了重大更改(非常感谢启动!)

我对该版本中处理多维属性的方式感到不满意。我从php文档页面获取了示例ini文件,并得到了一个结果,其中包括键
third\u section.phpversion
third\u section.url
——这与我的预期不同

我尝试使用a进行无限嵌套,但不幸的是,在它下面有键值对的头是递归的最大限制,在遇到错误消息时会被阻塞

因此,我从头开始,添加了一些曲线球作为第四个也是最后一个项目,最后得出以下结论:

$test=array(
“第一节”=>数组(
“一”=>1,
“五”=>5,
“动物”=>“渡渡鸟”,
),
“第二部分”=>数组(
'路径'=>“/usr/local/bin”,
'URL'=>“http://www.example.com/username",
),
“第三部分”=>数组(
“phpversion”=>数组(5.0、5.1、5.2、5.3),
“URL”=>数组(
“svn'=>”http://svn.php.net",
'git'=>“http://git.php.net",
),
),
“第四部分”=>数组(
7.0, 7.1, 7.2, 7.3,
),
“最后一项”=>23,
);
回声'

我知道这可能有点过分,但我自己的两个项目中确实需要这个功能。现在我可以读取ini文件,进行更改并保存它。

这是我的增强版答案(感谢他),我的函数是eco system类的一部分,因此使用了一个名为Arr::isAssoc的函数,该函数基本上用于检测给定数组是否为关联数组


private函数arrayToConfig(数组$array,数组$parent=[]):字符串
{
$returnValue='';
foreach($key=>$value的数组)
{
if(is_array($value))//小节大小写
{
//将所有部分合并到一个数组中
如果(is_int($key))$key++;
$subSection=array\u merge($parent,(array)$key);
//将节信息添加到输出中
if(Arr::isAssoc($value))
{
如果(计数($subSection)>1)$returnValue.=PHP\u EOL;
$returnValue.='['.内爆(':',$subSection)。']'.PHP_EOL;
}
//递归遍历更深的
$returnValue.=$this->arrayToConfig($value,$subSection);
$returnValue.=PHP\u EOL;
}
elseif(isset($value))$returnValue.=“$key=”(is_bool($value)?var_export($value,true):$value)。PHP_EOL;//普通键->值大小写
}
返回计数($parent)$returnValue:rtrim($returnValue).PHP\u EOL;
}

可能会对您有所帮助使用json不是更好吗?取决于应用程序。如果数据是在没有人工交互的情况下存储和检索的,或者是通过网络传输的(ajax等),则json是合适的。如果数据偶尔需要由开发人员或非开发人员手动编辑,则以更可读的.ini格式进行编辑是合适的。还应该提到的是,.ini文件实际上比php文件解析得更快。这些函数用于以ini格式解析ini文件或字符串,他希望ort数组到ini文件,这些函数没有DO@Brewal从手动“parse_ini_string()返回关联数组中字符串ini中的设置。“他想要相反的行动。他希望数组中的设置是用ini写的。@Robert你完全理解我的意思。您有什么解决方案吗?@user2216190-您希望已经编写好代码吗?从数组创建ini文件并不困难。即使是初学者也可以在15分钟内完成,这很简单,如果你用谷歌搜索,你可以找到你的问题的结果(它甚至会导致你出现stackoverflow)。”