【问题标题】:Array not being updated outside of foreach loop数组未在 foreach 循环之外更新
【发布时间】:2019-10-03 09:28:09
【问题描述】:

我有一段代码正在努力解决。我仍然在我的第一步,所以完全有可能是一些愚蠢的错误导致了这种情况。 我想把每个单词的每个第一个字符都变成大写,但由于某种原因它不起作用,我无法弄清楚。

        $split = explode(" ",$string);

        foreach ($split as $word) {

            if (ord($word[0]) >= 97 & ord($word[0]) <= 122){
                $word[0] = chr(ord($word[0]) - 32);              
        }}

        return $string;
    }

【问题讨论】:

标签: php


【解决方案1】:

你应该以不同的方式处理这个问题。

让我们首先创建我们的拆分:

$words = explode(' ', $words_string);

现在让我们遍历这些单词并使用 $key 参数记住它们的索引。

foreach($words as $index => $word) { //So we remember the key in the array using $k => $v

   $words[$index] = ucfirst($word); //This will uppercase the first letter.

}

【讨论】:

  • 既然有ucwords(),为什么还要使用foreachucfirst()
  • @MichalHynčica 因为他使用了 foreach,我不确定他的意图是否不仅仅是 ucfirst,所以我保持这种方式并让他的代码正常运行。
  • 好的,但是你错过了他返回原始的$string 而不是内爆修改后的数组。
【解决方案2】:

我链接的问题中解释了它不工作的原因。

但是,在您的情况下,解决方案要简单得多。如果您使用多字节字符串,您可以只使用ucwords() 函数或mb_convert_case()MB_CASE_TITLE

【讨论】:

    【解决方案3】:

    PHP 提供了内置函数,可帮助您将每个单词的第一个字符转换为字符串的大写字母,而不会爆炸和迭代。

    ucwords( $string );
    

    编辑:让我们包含一个示例来帮助您确定输出结果:

    echo ucwords("Hi this is just a simple test of converting each word's first charater to uppercase!");
    

    将返回

    Hi This Is Just A Simple Test Of Converting Each Word's First Charater To Uppercase!
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-26
      • 2017-07-22
      • 2018-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-17
      相关资源
      最近更新 更多