code: public static function arrayMergeDeep($arrayDef, $array2)
      {
          if (!\is_array($arrayDef) || self::isCallable($arrayDef)) {
              // not array or appears to be a callable
              return $array2;
          }
          if (!\is_array($array2) || self::isCallable($array2)) {
              // not array or appears to be a callable
              return $array2;
          }
          foreach ($array2 as $k2 => $v2) {
              if (\is_int($k2)) {
                  if (!\in_array($v2, $arrayDef)) {
                      $arrayDef[] = $v2;
                  }
              } elseif (!isset($arrayDef[$k2])) {
                  $arrayDef[$k2] = $v2;
              } else {
                  $arrayDef[$k2] = self::arrayMergeDeep($arrayDef[$k2], $v2);
              }
          }
          return $arrayDef;
      }
docs: Recursively merge two arrays
  
  @param array $arrayDef default array
  @param array $array2   array 2
  
  @return array