【问题标题】:PHP : I have String want to capitalize some letters in it using arraysPHP:我有字符串想使用数组将其中的一些字母大写
【发布时间】:2021-07-11 10:07:32
【问题描述】:

字符串是 = "你好,我是一个了不起的开发者,我喜欢 PHP" 我想要结果“你好,我是一个了不起的开发者,我喜欢 PHP”所以我应该如何编写代码,现在将向您展示我的代码

$str= "Hello I am an awesome developer, I love PHP";

echo $str . "<br>";
$arr = str_split($str);
echo "<pre>";
print_r($arr);
echo "</pre>";
for($i=0 ; $i< count($arr);$i++){
   if ( $arr[$i] == 'e' ){
    $arr[$i] = str_replace('e','E',$arr);

   }
   echo "<li>" . $arr[$i] . "</li>";
   }

【问题讨论】:

  • 你想大写哪些字母,你的方法是什么?
  • 您只想将元音和现有大写字母大写吗?
  • 您已经展示了一些代码,这是一个好的开始。现在您需要向我们展示这段代码给出的结果,以及您希望它给出的结果。
  • 另外,提示:php.net/strtoupper

标签: php arrays string


【解决方案1】:

我创建了一个将随机字母大写的函数:

<?php //php 7.2.24

function mocker($text) {
    $firstpass = str_split($text);
    $outstring = "";
    for ($i = 0; $i < strlen($text); $i++) {
        if ($i == 0) {
            $outstring[$i] = strtoupper($firstpass[$i]);
        }
        elseif (ctype_upper($outstring[$i-1])) {

            if (mt_rand(0,3) >= 2) {
                $outstring[$i] = strtoupper($firstpass[$i]);
            }
            else {
                $outstring[$i] = strtolower($firstpass[$i]);
            }
        }
        else {
            if (mt_rand(0,3) >= 2) {
                $outstring[$i] = strtolower($firstpass[$i]);
            }
            else {
                $outstring[$i] = strtoupper($firstpass[$i]);
            }
        }
    }
    return $outstring;
}

用法:echo mocker("Hello I am an awesome developer, I love PHP");

结果:HElLO i AM An awEsOME dEVelopEr, i LovE PhP

我是随机做的,因为我不知道它会升高或降低。 如果需要,您可以更改值。所以你可以得到你想要的。

【讨论】:

    【解决方案2】:

    你想太多了。

    您有一个要大写的字母列表,eo,并且您不希望更改任何其他内容。

    看起来是str_replace() 的完美案例

    $str = "Hello I am an awesome developer, I love PHP";
    $find = array('e','o');
    $replace = array('E','O');
    $result = str_replace($find,$replace,$str);
    

    $result 现在将是 "HEllO I am an awEsOmE dEvElOpEr, I lOvE PHP"

    【讨论】:

    • 不必手动设置$replace 可以使用:$replace = array_flip(array_change_key_case(array_flip($find), CASE_UPPER));
    【解决方案3】:

    如果您希望能够轻松选择要大写的字母,我建议设计一个函数:

    function capitalizeLetters(string $string, array $letters): string
    {
        $replacements = array_combine($letters, array_map('strtoupper', $letters));
        return strtr($string, $replacements);
    }
    

    有了这个,你可以简单地这样称呼它:

    $str = "Hello I am an awesome developer, I love PHP";
    capitalizeLetters($str, ['e', 'o']);
    

    它会产生你想要的结果。

    它是如何工作的:

    • strtr 根据收到的替换数组替换所有匹配项。
    • 替换是通过array_combine 创建的,它将我们的字母作为键,将它们的大写版本作为值。这会产生一个像这样的数组:
    [
        'e' => 'E',
        'o' => 'O',
    ]
    
    • 值的大写是通过array_map 完成的,它将strtoupper 函数应用于所有元素。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-03
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    • 2019-02-28
    • 1970-01-01
    相关资源
    最近更新 更多