2011-08-01 44 views
0

这是我正在尝试做的事情。我有页面的标题。我想大写第一个字的最后一个字母每个字符串另一个大写问题

例子:

你好

你好你怎么样

我可以得到它用一个字,但我的工作如果有多个单词,就不知道如何去做。任何帮助将是伟大的!

非常感谢!

+0

为什么哦,为什么,这是正常的语法。 – 2011-08-01 08:42:13

+0

尝试向我们展示您目前拥有的代码。 – Matt

回答

1

试试这个

<?php 

    $title     = "Hello World"; 
    list($firstword, $rest) = explode(" ", $title, 2); 
    $firstword    = strrev(ucfirst(strrev($firstword))); 
    $title     = $firstword . " " . $rest; 

    print $title; 

如果您想了解更多有关的任何功能看explodestrrevlist,​​

+0

哇,你们快!谢谢!! – Kathy

+0

欢迎您:) –

+0

他们很快就获得了名声,凯西。我们的课程是 –

1

既然你知道这是如何工作有1个字的方式,你只需要得到第一个词,然后把你的算法。

  1. 尝试preg_replace_callback"/^(\w+)/"
  2. 回调方法内更换的最后一个字符。

preg_replace_callback:http://php.net/manual/en/function.preg-replace-callback.php

更新 - 工作代码:

$string = "This is a test"; 
$string = preg_replace_callback(
     '/^(\w+)/', 
     create_function(
      '$matches', 
      'return yourUCLastAlgorithm($matches[0]);' 
     ), 
     $string 
    ); 
echo $string; 

UPDATE2 - 使用的preg_replace与e修饰符:

$string = "This is a test"; 
$string = preg_replace(
     '/^(\w+)/e', 
     'yourUCLastAlgorithm("$1")', 
     $string 
    ); 
echo $string; 
+0

难道你不认为lamda函数的正则表达式在这里有点矫枉过正,当你可以用泛型函数来做到这一点吗? –

+0

有另一个想法:使用带e修饰符的preg_replace。 –

+0

通常,我总是尝试使用regexps而不是自定义拆分解决方案。 –

-1

试试这个:

$string = preg_replace('/^([ ]+)?([^ ]*)([a-z])?(.*)?$/i', "$1.$2.strtoupper($3).$4", $string); 
+0

为什么如果不需要使用正则表达式?它太贵了 –

+0

因为这是第一个想法^^' –

+0

'This is a test' =>'This.strtoupper()。是一个测试'请在发布前检查。 –