无题
程序员文章站
2022-03-24 17:44:56
...
将 $array_1 数组处理成 $array_2 如何解?
$array_1 = array(
'app.debug'=>true,
'app.log.file.driver'=>'file',
'app.log.file.path'=>'./logs',
'app.log.redis.driver'=>'redis',
'app.log.redis.connection'=>'default',
'app.log.database.driver'=>'database',
'app.log.database.table'=>'cache'
);
$array_2 =array(
'app'=>array(
'debug'=>true,
'log'=>array(
'file'=>array(
'driver'=>'file',
'path'=>'./logs'
),
'redis'=>array(
'driver'=>'redis',
'connection'=>'default'
),
'database'=>array(
'driver'=>'database',
'table'=>'cache'
),
)
)
);
解法:
<?php
/**
* User: xianhenyuan
* Date: 2018-06-16
*/
//初始数组
$array_1 = array(
'app.debug'=>true,
'app.log.file.driver'=>'file',
'app.log.file.path'=>'./logs',
'app.log.redis.driver'=>'redis',
'app.log.redis.connection'=>'default',
'app.log.database.driver'=>'database',
'app.log.database.table'=>'cache'
);
echo '<pre>';
var_dump(handleArr($array_1));
function handleArr($array){
//存放处理后的数组
$arr = array();
//处理数组
foreach($array as $ik=>$iv){
//将下标切割成数组
$ikArr = explode('.',$ik);
//下标 数组的长度
$ikLen = count($ikArr);
//value 为原始数据
$two = $iv;
//倒序将 下标 拼接成:array('app'=>array('debug'=>true)) 格式
for($i=($ikLen-1);$i>=0;$i--){
$two = array($ikArr[$i]=>$two);
}
//合并两个数组
mergeArr($arr, $two);
}
//
return $arr;
}
/****
* 合并多维数组:
* 将A,B两个多维数组合并为C数组
* A,B数组均为关联数组
* 若key在A,B中均存在,若value都不是数组,取A的值
* 若key在A,B中均存在,若其中一个value为数组,取数组的值
*/
function mergeArr(&$a,$b){
foreach($a as $key=>&$val){
if(is_array($val) && array_key_exists($key, $b) && is_array($b[$key])){
mergeArr($val,$b[$key]);
$val = $val + $b[$key];
}else if(is_array($val) || (array_key_exists($key, $b) && is_array($b[$key]))){
$val = is_array($val)?$val:$b[$key];
}
}
$a = $a + $b;
}
运行结果如下:
thanks~
上一篇: java三维数组格式输出
下一篇: java 赋值操作