首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP array_replace_recursive如果标量,array_merge_recursive if数组

PHP array_replace_recursive如果标量,array_merge_recursive if数组
EN

Stack Overflow用户
提问于 2016-02-22 11:40:25
回答 1查看 1.6K关注 0票数 7

我有一些默认的配置,以及一些可以配置的特定配置。我需要将特定的配置合并到默认配置中。

  • 在不存在特定配置选项的情况下,将使用默认选项。
  • 如果value是标量,则应该应用特定的配置。
  • 如果value是标量数组,则应该合并数组并应用array_unique。
  • value是一个关联数组的情况下,我们需要应用上述scalarscalar_array规则。

示例:

代码语言:javascript
复制
$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' => [
          ...
      ]
   ],
];

预期产出:

代码语言:javascript
复制
$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' => [
          ...
      ]
   ],
];

有一个很好的清洁的方式来实现这一点吗?

EN

回答 1

Stack Overflow用户

发布于 2016-03-31 07:12:29

我的情况略有不同,但可能会有所帮助。我需要替换数组上的标量和array_merge_recursive。

代码语言:javascript
复制
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;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35552679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档