如何在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?
感谢。
答案 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);
}