在PHP上替换符号(带条件)

时间:2014-06-29 12:43:17

标签: php

如何在PHP上正确制作? 如果设定范围有小写字母 - >在big上替换它们。


length of string - const
number of symbols from 0
set range : [4,6]

示例:

17xG2v9Hj5    ->    17xG2V9Hj5  
b7qfK5yte9    ->    b7qfK5Yte9 

我的代码:

$m = '17xG2v9Hj5';

$s1 = mb_substr($m, 0, 4);      // -> 17xG
$s2 = mb_substr($m, 4, 3);      // -> 2v9
$ss = ucwords(strtoupper($s2)); // -> 2V9
$s3 = mb_substr($m, 7,3);       // -> Hj5

$my = $s1.$ss.$s3;              // -> 17xG2V9Hj5

var_dump($m).'<br/>';

var_dump($s1).'<br/>';
var_dump($s2).'<br/>';
var_dump($ss).'<br/>';
var_dump($s3).'<br/>';

var_dump($my).'<br/>';// ??? ['<br/>'] for [var_dump()] 
                      // don't work;

String : [a-z] and [0-9]. 
It is possible to make more shortly and faster?

感谢。

2 个答案:

答案 0 :(得分:1)

我真的不确定你想要达到什么目标?

var_dump通常用于调试目的,如果包含在<pre></pre>标记中,其输出将更具可读性。

var_dump($my).'<br/>';

实际上不会将'<br/>'附加到var_dump的输出中,它会在var_dump附加值返回,在这种情况下{{1} }

void

如果您想在$out = var_dump($my).'<br/>'; //$out == '<br/>' 之后输出<br/>,则必须单独回复。

var_dump

答案 1 :(得分:0)

您可以使用substr_replace在一轮中执行此操作(假设范围和字符串长度是固定的)

$in = '17xG2v9Hj5';

var_dump(substr_replace($in, mb_strtoupper(mb_substr($in, 4, 3)), 4, 3));

可以找到substr_replace函数的多字节变体here

以下答案基于问题的Revision 1,假设需要更通用的解决方案

天真的解决方案,但如果我理解你的问题应该有效:

<?php

$in = '17xG2v9Hj5';
$range = [4,6];
var_dump(uc_range($in, $range));


function uc_range($string, array $range) {
    if(!is_string($string)) {
        throw new InvalidArgumentException('$string is supposed to be a string');
    }
    $chars = str_split_unicode($string);
    foreach(range($range[0], $range[1]) as $keyIndex) {
        if(isset($chars[$keyIndex])) {
            $chars[$keyIndex] = mb_strtoupper($chars[$keyIndex]);
        }
    }
    return implode("", $chars);  
}

// see http://www.php.net/manual/en/function.str-split.php#107658
function str_split_unicode($str, $l = 0) {
    if ($l > 0) {
        $ret = array();
        $len = mb_strlen($str, "UTF-8");
        for ($i = 0; $i < $len; $i += $l) {
            $ret[] = mb_substr($str, $i, $l, "UTF-8");
        }
        return $ret;
    }
    return preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY);
}