Reputation:
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.
Upvotes: 0
Views: 141
Reputation: 173552
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.
Upvotes: 1
Reputation: 487
$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;
Upvotes: 1
Reputation: 9267
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;
}
Upvotes: 0