这是一个好用且强大的工具类,可以在网页上快捷的配置更多使用方法。
这是一个会将文本手动输入的Ini数据的文本转换成数组的一个工具类
方便在开发一些及其复杂的配置,但是又不想使用json,并且人又能读得懂的配置,就可以使用这个工具类。
开发者:荔枝、某毅
开始使用
由于工具类是在PHP8.0开发的,暂未测试是否向下兼容
1.准备一串字符串数据
[title1]
miku = aaa
[title2]
miku[].qaq = aaa
[title3]
miku.qaq=aaa
2.将工具类IniUtil引入进PHP当中并使用准备好的字符串调用toArray方法
declare(strict_types=1);
require_once 'IniUtil.php';
$config = file_get_contents(__DIR__ . '/data.txt');
$data = IniUtil::toArray((string)$config);
print_r($data);
使用该方法可以直接得到上方演示图的效果
该工具的使用方法肥肠的煎蛋,我就不做过多介绍
<p style="color:#red">如果不会可以在评论区积极留言!</p>
IniUtil工具代码
<?php
declare(strict_types=1);
class IniUtil
{
/**
* 数据递归
* @param array $a1
* @param array $a2
* @return array
*/
private static function arrayMerge(array $a1, array $a2): array
{
$arr = $a1 + $a2;
foreach ($arr as $k => $v) {
if (is_array($v) && isset($a1[$k]) && isset($a2[$k])) {
$arr[$k] = self::arrayMerge($a1[$k], $a2[$k]);
}
}
return $arr;
}
/**
* 对象解析器
* @param $src
* @param array $link
* @param string $value
*/
private static function parseObj(&$src, array $link, string $value)
{
if (count($link) <= 0) {
$src = $value;
return;
}
//拿到第一个key
$shift = array_shift($link);
//判断当前链式是否带[]
if (str_contains($shift, '[]')) {
//数组解析,创建数组
$key = str_replace("[]", "", $shift);
$src[$key][] = [];
$index = count($src[$key]) - 1;
self::parseObj($src[$key][$index], $link, $value);
//解析对象
} else {
$src[$shift] = [];
self::parseObj($src[$shift], $link, $value);
}
}
/**
* JSON转化数组
* @param string $content
* @return array
*/
public static function toArray(string $content): array
{
$data = preg_split('/[\r\n]+/s', trim($content));
$list = [];
$nodeName = "";
foreach ($data as $value) {
if (empty($value)) {
continue;
}
preg_match('#\\[(.*?)\\]$#', $value, $match);
if (isset($match[1])) {
$nodeName = $match[1];
if (!array_key_exists($nodeName, $list)) {
$list[$nodeName] = [];
}
} else {
if (!empty($nodeName)) {
$temporary = explode('=', $value);
if (count($temporary) != 2) {
//异常处理
exit("配置解析异常,{$value} 没有赋值");
//throw new JSONException('配置解析异常,' . $value . ' 没有赋值');
}
$left = trim($temporary[0]);
$leftParse = explode(".", $left);
$src = [];
self::parseObj($src, $leftParse, trim($temporary[1]));
$list[$nodeName] = self::arrayMerge($list[$nodeName], $src);
} else {
//异常处理
exit("配置解析异常,{$value} 不能没有节点");
//throw new JSONException("配置解析异常,{$value} 不能没有节点");
}
}
}
return $list;
}
}
下载工具类(含演示): Ini工具类(含演示).zip
工具类: IniUtil.php (在下载包内)
演示包使用说明: 访问parsing.php即可预览效果!
该文章以及工具类为原创设计,如需转载请标注好本小站地址哦!