Question

I am using this table to generate password. I am using this code to shuffle and it shuffles only rows and not columns randomly. I want to place them randomly in tables mixing both rows and column values.

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

Can anyone help me solve this.

Was it helpful?

Solution

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

OTHER TIPS

It might be easier to dump all values into a single string, shuffle that and slice out a new password:

$original = 't9w3w3r2e296h3ooh545i2g5k439j9r3t1f82jy9e3f6a1k7i3';
$password = substr(str_shuffle($original), 0, 6); // generate 6-char password

Though, for password generation I would recommend using my other answer instead.

Your $matrix is multidimensional (specifically twodimensional) array, one foreach will just output the array, I think this is what u need

foreach($matrix as $matrixChild) {
    shuffle($matrixChild); // updated
    foreach ($matrixChild as $k => $value) {
        echo $value;
    }
}       

EDIT

btw, why don't u use usual standard random string generator, smth like this

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;
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top