1 <?php
2 // 根据起始和结束位置翻转字符串
3 function reverse_str(&$str,$start,$end){
4 $middle = intval(($start+$end) / 2);
5 for ($head=$start;$head<=$middle;$head++){
6 $tail = $end - $head + $start;
7 if ($str[$head] == $str[$tail]){
8 continue;
9 }
10 $temp = $str[$head];
11 $str[$head] = $str[$tail];
12 $str[$tail] = $temp;
13 }
14 }
15
16 function reverse_words(&$str){
17 // 直接翻转整个字符串
18 $i = 0;
19 while (isset($str[$i])){
20 $i++;
21 }
22 reverse_str($str,0,$i-1);
23
24 // 按空格区分单词,恢复单词的正常顺序
25 $i = 0;
26 $start = $i;
27 do{
28 $i++;
29 // 略过连续的空格
30 if ($str[$i-1] == ' ' && $str[$i] == ' '){
31 $start = $i + 1;
32 continue;
33 }
34 // 确定单词的起始位置,并对单词进行翻转
35 if (($str[$i] == ' ' || !isset($str[$i])) && $i > $start){
36 reverse_str($str,$start,$i-1);
37 $start = $i + 1;
38 }
39 }while (isset($str[$i]));
40 }
41
42 $str = 'abcd efgh';
43 reverse_words($str);
44 var_dump($str); // string(9) "efgh abcd"