如何保持一些单词在ucwords上大写

时间:2010-07-14 19:10:00

标签: php

我的数据库SMK SUNGAI PUNAI

中的示例
$school = 'SMK SUNGAI PUNAI';
echo ucwords(strtolower($school));

输出Smk Sungai Punai

问题

如何使输出为SMK Sungai Punai,其中SMK仍为大写。

更新

问题我有10K学校名单。从PDF我转换为mysql。我完全从PDF中复制了学校的名称。全部用大写字母表示。如果可以的话,我需要一个解决方案。

3 个答案:

答案 0 :(得分:3)

据我了解,你希望所有学校名称都包含大写的每个单词的第一个字符,并从此处理中排除一些特殊单词(我的样本中的$例外)。

你可以这样做:

   function createSchoolName($school) {
      $exceptions = array('SMK', 'PTS', 'SBP');
      $result = "";
      $words = explode(" ", $school);
      foreach ($words as $word) {
          if (in_array($word, $exceptions))
              $result .= " ".$word;
          else
              $result .= " ".strtolower($word);
      }
      return trim(ucwords($result));
   }

echo createSchoolName('SMK SUNGAI PUNAI');

此示例将根据您的问题返回SMK Sungai Punai

答案 1 :(得分:1)

没有非常好的方法可以做到这一点。在这种情况下,你可以假设它是一个缩写,因为它只有三个字母长而且不包含元音。您可以编写一组规则来查找字符串中的缩写,然后将它们大写,但在某些情况下,这将是不可能的......请考虑“BOB PLAYS TO WOW WOW。”

答案 2 :(得分:0)

您可以使用以下内容:

<?php
$str = 'SMK SUNGAI PUNAI';
$str = strtolower($str);
$arr = explode(" ", $str);

$new_str = strtoupper($arr[0]). ' ' .ucfirst($arr[1]). ' ' .ucfirst($arr[2]);
echo '<p>'.$new_str.'</p>';

// Result: SMK Sungai Punai
?>