3

我想在 php 中 CapiTaLiZe $string,不要问为什么:D

我做了一些研究并在这里找到了很好的答案,他们真的帮助了我。但是,就我而言,我想开始将每个单词中的每个奇数字符 (1,2,3...) 大写。

例如,通过我的自定义函数,我得到了这个结果“TeSt eXaMpLe”并且想要得到这个“TeSt ExAmPlE”。看到第二个示例中的单词“example”以大写“E”开头吗?

那么,任何人都可以帮助我吗?:)

4

5 回答 5

2

好吧,我只是把它做成一个数组,然后再把它放回去。

<?php

$str = "test example";

$str_implode = str_split($str);

$caps = true;
foreach($str_implode as $key=>$letter){
    if($caps){
        $out = strtoupper($letter);
        if($out <> " ") //not a space character
            $caps = false;
    }
    else{
        $out = strtolower($letter);
        $caps = true;
    }
    $str_implode[$key] = $out;
}

$str = implode('',$str_implode);

echo $str;

?>

演示:http ://codepad.org/j8uXM97o

于 2011-08-22T21:28:47.727 回答
2

我会使用正则表达式来做到这一点,因为它简洁易行:

$str = 'I made some research and found good answers here, they really helped me.';
$str = preg_replace_callback('/(\w)(.?)/', 'altcase', $str);
echo $str;

function altcase($m){
    return strtoupper($m[1]).$m[2];
}

输出:“我做了一些研究并在这里找到了很好的答案,他们真的帮助了我。”

例子

于 2011-08-22T21:42:58.053 回答
1

这是一个应该工作的班轮。

preg_replace('/(\w)(.)?/e', "strtoupper('$1').strtolower('$2')", 'test example');

http://codepad.org/9LC3SzjC

于 2011-08-22T21:42:40.463 回答
1

尝试:

function capitalize($string){
    $return= "";
    foreach(explode(" ",$string) as $w){
        foreach(str_split($w) as $k=>$v) {
            if(($k+1)%2!=0 && ctype_alpha($v)){
                $return .= mb_strtoupper($v);
            }else{
                $return .= $v;
            }
        }
        $return .= " ";
    }
    return $return;
}
echo capitalize("I want to CaPiTaLiZe string in php, don't ask why :D");
//I WaNt To CaPiTaLiZe StRiNg In PhP, DoN'T AsK WhY :D

编辑:修复了输出中缺少特殊字符的问题。

于 2011-08-22T21:57:46.240 回答
1

此任务可以在不使用捕获组的情况下执行 - 只需使用ucfirst().

这不是为处理多字节字符而构建的。

抓取一个单词字符,然后(可选)下一个字符。从全字符串匹配中,仅更改第一个字符的大小写。

代码:(演示)(或演示

$strings = [
    "test string",
    "lado lomidze needs a solution",
    "I made some research and found 'good' answers here; they really helped me."
];  // if not already all lowercase, use strtolower()

var_export(preg_replace_callback('/\w.?/', function ($m) { return ucfirst($m[0]); }, $strings));

输出:

array (
  0 => 'TeSt StRiNg',
  1 => 'LaDo LoMiDzE NeEdS A SoLuTiOn',
  2 => 'I MaDe SoMe ReSeArCh AnD FoUnD \'GoOd\' AnSwErS HeRe; ThEy ReAlLy HeLpEd Me.',
)

对于其他研究人员,如果您(更简单地)只想将所有其他字符转换为大写,您可以在您的模式中使用/..?/,但在这种情况下使用正则表达式将是矫枉过正。您可以更有效地使用for()循环和双增量。

Code (Demo)

$string = "test string";
for ($i = 0, $len = strlen($string); $i < $len; $i += 2) {
    $string[$i] = strtoupper($string[$i]);
}
echo $string;
// TeSt sTrInG
// ^-^-^-^-^-^-- strtoupper() was called here
于 2018-10-04T08:57:29.713 回答