我正在使用此表生成密码。我正在使用此代码进行随机播放,它随机播放行而不是列。我想将它们随机放在混合行和列值的表中。
$matrix=array();
$matrix[3][0]="h5";$matrix[3][1]="h3";$matrix[3][2]="96";$matrix[3][3]="45";$matrix[3][4]="oo";
$matrix[1][0]="39";$matrix[1][1]="k4";$matrix[1][2]="i2";$matrix[1][3]="j9";$matrix[1][4]="g5";
$matrix[0][0]="t1";$matrix[0][1]="2j";$matrix[0][2]="r3";$matrix[0][3]="f8";$matrix[0][4]="y9";
$matrix[4][0]="i3";$matrix[4][1]="k7";$matrix[4][2]="a1";$matrix[4][3]="e3";$matrix[4][4]="f6";
$matrix[2][0]="t9";$matrix[2][1]="e2";$matrix[2][2]="w3";$matrix[2][3]="r2";$matrix[2][4]="w3";
shuffle($matrix);
//Shuffle the array
foreach($matrix as $key => $value) {
echo "$value
}
任何人都可以帮我解决这个问题。
答案 0 :(得分:1)
$shuffled_ = array();
$shuffled = array();
foreach( $matrix as $val )
foreach($val as $v)
$shuffled_[] = $v;
shuffle($shuffled_);
foreach( $shuffled_ as $key => $val )
$shuffled[ floor($key / 5) ][$key % 5] = $val;
答案 1 :(得分:1)
将所有值转储到单个字符串中可能更容易,将其洗牌并切出新密码:
$original = 't9w3w3r2e296h3ooh545i2g5k439j9r3t1f82jy9e3f6a1k7i3';
$password = substr(str_shuffle($original), 0, 6); // generate 6-char password
但是,对于密码生成,我建议改为使用my other answer。
答案 2 :(得分:0)
你的$ matrix是多维的(特别是二维的)数组,一个foreach只输出数组,我想这就是你需要的
foreach($matrix as $matrixChild) {
shuffle($matrixChild); // updated
foreach ($matrixChild as $k => $value) {
echo $value;
}
}
修改强>
顺便问一下,为什么你不使用通常的标准随机字符串生成器,像这样的function generatePassword ($length = 8){
$password = "";
$i = 0;
$possible = "0123456789abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ";
while ($i < $length){
$char = substr($possible, mt_rand(0, strlen($possible)-1), 1);
if (!strstr($password, $char)) {
$password .= $char;
$i++;
}
}
return $password;
}