Gra*_*avy 7 php arrays recursion scalar array-merge
我有一些默认配置,以及一些可配置的特定配置.我需要将特定配置合并到默认配置中.
value是标量的情况下,应该应用特定配置value是标量数组,则应合并数组并应用array_unique.value是一个关联数组,我们需要应用上面scalar和scalar_array规则.例:
$defaultConfigs = [
'scalar1' => 1,
'scalar2' => "Apple",
'array_scalar' => [3,4,5],
'array_associative' => [
'scalar' => 1,
'array_scalar' => [1,2,3],
'array_associative' => [
...
]
],
];
$specificConfigs = [
'scalar1' => "A",
'array_scalar' => [3,4,5],
'array_associative' => [
'scalar' => 1,
'array_scalar' => [1,2,3],
'array_associative' => [
...
]
],
];
Run Code Online (Sandbox Code Playgroud)
预期产出:
$expectedConfigs = [
'scalar1' => "A", // Overridden
'scalar2' => "Apple", // Default used
'array_scalar' => [1,2,3,4,5], // Scalar merged and array_unique
'array_associative' => [
'scalar' => "B", // Overridden
'array_scalar' => [1,2,3,4,5], // Scalar merged and array_unique
'array_associative' => [
...
]
],
];
Run Code Online (Sandbox Code Playgroud)
有一个很好的清洁方式来实现这一目标吗?
我的情况略有不同,但可能会有所帮助。我需要替换数组上的标量和 array_merge_recursive 。
class ArrayUtil {
public static function mergeRecursive(array $array1, $array2) {
if($array2 && is_array($array2)) {
foreach($array2 as $key => $val2) {
if (is_array($val2) && (null!==($val1 = isset($array1[$key]) ? $array1[$key] : null)) && is_array($val1)) {
$array1[$key] = self::mergeRecursive($val1,$val2);
} else {
$array1[$key] = $val2;
}
}
}
return $array1;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
905 次 |
| 最近记录: |