实现原理
根据php内置函数 array_replace_recursive 实现原理改了下,增加了默认数组结构
应用场景
array_replace_recursive 函数是递归地使用后面数组的值替换第一个数组的值。所以无法保证数组的结构是固定的,比如前端传值的时候多传递了几个参数,在用到这个函数替换的时候最终返回的数组结构里就会有这几个参数存到数据库中
代码实现
/**
* 根据默认数组结构体-递归地使用后面数组的值替换第一个数组的值
* 针对内置array_replace_recursive函数增加默认结构,返回数组最终格式为默认数组格式
* 语法 array_replace_recursive($structure,array1,array2,array3...)
*
* @param $structure array 默认结构体
* @param $array array 当前数组
* @param $array1 array 要替换的数组
* @return array
*/
function array_replace_recursive( $structure, $array, $array1 )
{
function recurse( $structure, $array, $array1 )
{
foreach ( $array1 as $key => $value ) {
//先判断默认结构中是否存在,如果不存在直接丢掉
if ( !isset( $structure[$key] ) ) {
continue;
}
// create new key in $array, if it is empty or not an array
if ( !isset( $array[$key] ) || ( isset( $array[$key] ) && !is_array( $array[$key] ) ) ) {
$array[$key] = [];
}
// overwrite the value in the base array
if ( is_array( $value ) ) {
$value = recurse( $structure[$key], $array[$key], $value );
}
$array[$key] = $value;
}
return $array;
}
// handle the arguments, merge one by one
$args = func_get_args();
$array = $args[0];
if ( !is_array( $array ) ) {
return $array;
}
for ( $i = 1; $i < count( $args ); $i++ ) {
if ( is_array( $args[$i] ) ) {
$array = recurse( $structure, $array, $args[$i] );
}
}
return $array;
}