如何随机播放阵列

时间:2014-02-23 09:52:20

标签: php arrays shuffle

我正在使用此表生成密码。我正在使用此代码进行随机播放,它随机播放行而不是列。我想将它们随机放在混合行和列值的表中。

$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
}

任何人都可以帮我解决这个问题。

3 个答案:

答案 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;
}