protected static function mbStrReplaceCaller(
        $search,
        $replace,
        $subject,
        $caseInsensitive = false,
        $encoding = self::DEFAULT_ENCODING,
        &$count = null
    ) {
        if (is_array($subject)) {
            $result = [];
            foreach ($subject as $item) {
                $result[] = static::mbStrReplaceCaller($search, $replace, $item, $caseInsensitive, $encoding, $count);
            }

            return $result;
        }

        if (!is_array($search)) {
            return static::mbStrReplaceInternal($search, $replace, $subject, $caseInsensitive, $encoding, $count);
        }

        $replaceIsArray = is_array($replace);
        foreach ($search as $key => $value) {
            $subject = static::mbStrReplaceInternal(
                $value,
                ($replaceIsArray ? $replace[$key] : $replace),
                $subject,
                $caseInsensitive,
                $encoding,
                $count
            );
        }

        return $subject;
    }