为 Javascript 数组添加 shuffle 方法

PHP 里面有个非常方便的打乱数组的函数 shuffle() ,这个功能在许多情况下都会用到,但 javascript 的数组却没有这个方法,没有不要紧,可以扩展一个,自己动手,丰衣足食嘛。

为 Javascript 数组添加 shuffle 方法 – 示例

 
<script type="text/javascript">
//<![CDATA[
// 说明:为 Javascript 数组添加 shuffle 方法
// 整理:http://www.CodeBit.cn

var shuffle = function(v){
    for(var j, x, i = v.length; i; j = parseInt(Math.random() * i), x = v[--i], v[i] = v[j], v[j] = x);
    return v;
};

var a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

document.write("A = ", a.join(","), "<br />shuffle(A) = ", shuffle(a));

//]]>
</script>

通过 prototype 给数组添加一个方法:

 
<script type="text/javascript">
//<![CDATA[

var a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

if (!Array.prototype.shuffle) { 
	Array.prototype.shuffle = function() {
		for(var j, x, i = this.length; i; j = parseInt(Math.random() * i), x = this[--i], this[i] = this[j], this[j] = x);
		return this;
	};
}

document.write("A = ", a.join(","), "<br />A.shuffle() = ", a.shuffle());

//]]>
</script>

PHP 中打乱(shuffle)关联数组的排序

PHP 提供了一个 shuffle() 函数,可以打乱给定的数组排序,但是此函数“将删除原有的键名而不仅是重新排序”,如果传入的是关联数组,则关联数组的键名将丢失,本文介绍的函数可以解决这一问题。

 
<?php
// 说明:PHP 中打乱(shuffle)关联数组的排序
// 整理:http://www.CodeBit.cn

$arr = array(
	'Javascript'=>'253',
	'CSS'=>'612',
	'PHP/MySQL'=>'1036',
	'(X)HTML'=>'361',
	'Ajax'=>'492',
);

// 打乱关联数组的排序
function shuffle_assoc($array)
{ 
	$randomized_keys = array_rand($array, count($array)); 
	foreach($randomized_keys as $current_key)
	{ 
		$output[$current_key] = $array[$current_key]; 
	} 
	return $output;
}

echo "<pre>";
print_r($arr);
echo "</pre><hr />";


echo "<pre>";
print_r(shuffle_assoc($arr));
echo "</pre><hr />";

?>

php 中生成随机字符串的方法

在一些特殊应用中,需要生成随机字符串,比如生成系统随机密码或者是登陆验证码等,本文介绍的函数能够返回指定长度的随机字符串,默认包含大小写字母和数字,你可以很容易的修改以便符合自己的需要。

自 PHP 4.2.0 起,不再需要用 srand() 或 mt_srand() 函数给随机数发生器播种,之前的版本可以在 mt_rand 之前先运行mt_srand((double)microtime()*1000000) 。

 
<?php
// 说明:php 中生成随机字符串的方法
// 整理:http://www.CodeBit.cn

function genRandomString($len)
{
	$chars = array(
		"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", 
		"l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", 
		"w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", 
		"H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", 
		"S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2", 
		"3", "4", "5", "6", "7", "8", "9"
	);
	$charsLen = count($chars) - 1;

	shuffle($chars);	// 将数组打乱
	
	$output = "";
	for ($i=0; $i<$len; $i++)
	{
		$output .= $chars[mt_rand(0, $charsLen)];
	}

	return $output;

}

$str = genRandomString(25);
$str .= "<br />";
$str .= genRandomString(25);
$str .= "<br />";
$str .= genRandomString(25);

echo $str;

?>

注:传入的参数是你想要生成的随机字符串的长度。