牛骨文教育服务平台(让学习变的简单)
博文笔记

PHP随机生成N个汉字的实现方法(含代码)

创建时间:2014-11-11 投稿人: 浏览次数:139
博客搬家至 油皮8

一、需求说明

在我们的一个APP项目中,有一个答题应用---摆字题,形式如下图示


根据需求,我们在系统后台设置好答案,然后让系统自动生成18个汉字,在这18个汉字中包含设置好的答案。

二、我的代码实现片段

	/**
	 * 随机生成N个汉字
	 * @param  string $giveStr  必须含有的字
	 * @param  int $num 需要生成多少个汉字
	 * @return string 返回生成的字符串
	 */
	private function getRndWords( $giveStr="", $num=18 ){
		$str     = "北京澜声科技有限公司的主要产品是听见啦金玉良缘冰清玉洁继往开来锦绣山河冰雪聪明功成名就桃花潭水深千尺不及汪伦送我情先帝创业未半而中道今天下三分益州疲弊此诚危急存亡之秋也然侍卫之臣不懈于内忠志之士忘身于外者盖追先帝之殊遇欲报之于陛下也诚宜开张圣听";# 字库
		$newStr  = "";       # 随机生成的包含答案的字符串
		$anLo    = array();  # 设定的答案所在的位置。
		$bit     = 3;        # 位数,在本系统中是utf-8编码,一个中文长度为3
		$anLenth = floor(strlen($giveStr)/$bit); # 答案长度,在UTF编码中,
		
		# 这些汉字在18个汉字中的位置
		$i = 0;
		while ( $i<$anLenth ) {
			$rd = rand( 0, $num-1 );
			if(in_array($rd,$anLo)) continue; # 保证了不重复。
			$anLo[] = $rd;
			$i++;
		}
		
		for( $j=0; $j<$num;$j++ ){
			if(in_array($j,$anLo)){
				$k = array_search($j,$anLo);
				$newStr .= mb_substr($giveStr,$k*$bit,$bit); #echo $newStr."<br>";
				
			} else {
				$rd  = rand(0,(strlen($str)-1)/$bit);
				$wd  = mb_substr($str,$rd*$bit,$bit);
				$str = str_replace($wd, "", $str);
				$newStr .= $wd;
			}
		}
		return $newStr;
	}
	

最终效果


声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。