【问题标题】:Get the position of first capital letter in a string using php使用php获取字符串中第一个大写字母的位置
【发布时间】:2012-05-01 18:58:55
【问题描述】:

我有一个数组,其中每个单词中的不同字母都是大写的:

苹果、橙子、香蕉、芒果、木瓜

我想得到第一个大写字母的位置。并相应地订购它们。 也就是说,首字母大写的单词排在第一位,第二个大写字母排在第二位,依此类推......就像

橙色
木瓜
苹果
芒果
香蕉

如果两个单词在相同位置带有大写字母,例如在上面的列表中 Orange 和 Pappaya 以首字母为大写,然后必须按字母顺序排序。

这在php中很难实现吗?

【问题讨论】:

标签: php string sorting


【解决方案1】:

你可以使用strcspn()

查找与掩码不匹配的初始段的长度

例如:

echo strcspn('aAple', 'ABCDEFGHJIJKLMNOPQRSTUVWXYZ');
// prints '1' - the string starts with 1 character not in upper case

完整代码

echo "<pre>" ;
$array = array("aPple", "Orange", "baNana", "mANgo", "Papaya");
foreach($array as $value)
{
    echo $value , "= " , strcspn($value, 'ABCDEFGHJIJKLMNOPQRSTUVWXYZ') . PHP_EOL;
}

输出

aPple= 1
Orange= 0
baNana= 2
mANgo= 1
Papaya= 0

您使用该功能进行(反向)排序。

【讨论】:

  • 如果您不喜欢拥有整个字母表的想法(无论出于何种原因),您可以使用strcspn('aAple', implode('', range('A', 'Z')));
  • @RobinCastlin 你的implode 语句只保存了一个字符 ;-)
  • 是的,没错。但我宁愿让系统从 A 到 Z,然后自己打字。 :D 也许我忘记了一封信!
【解决方案2】:
preg_match("/^.*?[A-Z]/", 'aAple', $arr);

$str_position = (strlen($arr[0]) - 1);

有很多方法可以做到这一点。使用你认为最合乎逻辑的那个。 :)

这只是简单地将字符串的第一部分返回到第一个大写字母。然后我计算字符串长度并减去 1。

【讨论】:

    【解决方案3】:

    如果你使用 PHP > 5.3,你可以使用这个:

    $test = array("aPple", "Orange", "baNana", "mANgo", "Papaya");
    
    echo implode(', ', array_map(function($value){
        $matches = array();
        preg_match('/[A-Z]/', $value, $matches, PREG_OFFSET_CAPTURE);
        return $matches[0][1];
    }, $test));
    

    否则,您必须创建另一个函数来替代 lambda 函数。

    输出:1, 0, 2, 1, 0

    【讨论】:

      【解决方案4】:

      如果你想要一种非花哨的方式来做到这一点,这是我的建议:

      ** 获取上限位置 *

       function getCapsPosn($str)
       {
        $i = 0;
        $CapsPosn = -1;
        for ($i =0 ; $i < strlen($str) ; $i++)
        {
          if (( ord($str[$i]) >= 65 ) && ( ord($str[$i]) <= 90))
          {
              //echo ord($str[$i]);
              $CapsPosn = $i;
              return $CapsPosn;
          }
        }
       }
      

      使用关联数组将 Caps 位置存储在数组中。例如数组['苹果'] = '1' 等等。然后使用php排序函数对其进行排序。 PHP排序函数可以在:http://php.net/manual/en/array.sorting.php

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-05
        • 1970-01-01
        • 2015-07-24
        • 1970-01-01
        • 2023-02-23
        • 2022-07-02
        • 1970-01-01
        • 2013-02-21
        相关资源
        最近更新 更多