问题:给定任意一个字符串,将其字符位置按随机顺序重新排列,求重新排列的字符串

分析:通过一临时字符串,初始为给定字符串;从给定字符串最后一个位置开始获取新的字符值,临时字符串的最后一个位置字符和该新的字符交换后置为0即不再访问,直到给定字符串第二个位置,此时临时字符串也只有第一个字符有效而给定字符串也只有第一个字符没获新值.

代码:

<?php
$str="1230456789";
echo $str."<br />";

echo rand_shuffle($str);

function rand_shuffle($str){//支持任意字符串
    $n=strlen($str);
    $temp = $str;//临时字符串

    for($i=$n-1;$i>0;--$i){
        $random_index = rand(1,10000)%$i;//控制随机字符索引<$i
   
        $str{$i} = $temp{$random_index};//获取随机字符
        $temp{$random_index} = $temp{$i};
        $temp{$i} = 0;//伪删除该随机字符   
    }
    $str{$i}=$temp{0};//最后一个字符
    return $str;
}
?>

测试数据:

(1)给定:1230456789
   结果:7841095632

(2)给定:abcdefghigklmnopqrstuvwxyz
   结果:euxkclqbwayirmfvgznpgsdoth

后语:还是欢迎大家测试,看看结果是否正确,欢迎排砖!