在 PHP 中使用 RAND 生成星号随机


asterisk random generation using rand in php

$r = array(
array('.','.','.','*','.','*','.','.','.','*','.','*','.','.','.','.','*','.','*','.'),
array('.','.','.','*','.','*','.','.','.','*','.','*','.','.','.','.','*','.','*','.'),
array('.','.','.','*','.','*','.','.','.','*','.','*','.','.','.','.','*','.','*','.'),
array('.','.','.','*','.','*','.','.','.','*','.','*','.','.','.','.','*','.','*','.'),
array('.','.','.','*','.','*','.','.','.','*','.','*','.','.','.','.','*','.','*','.'),
array('.','.','.','*','.','*','.','.','.','*','.','*','.','.','.','.','*','.','*','.'),
array('.','.','.','*','.','*','.','.','.','*','.','*','.','.','.','.','*','.','*','.'),
array('.','.','.','*','.','*','.','.','.','*','.','*','.','.','.','.','*','.','*','.'),
array('.','.','.','*','.','*','.','.','.','*','.','*','.','.','.','.','*','.','*','.'),
array('.','.','.','*','.','*','.','.','.','*','.','*','.','.','.','.','*','.','*','.'),
array('.','.','.','*','.','*','.','.','.','*','.','*','.','.','.','.','*','.','*','.'),
array('.','.','.','*','.','*','.','.','.','*','.','*','.','.','.','.','*','.','*','.'),
array('.','.','.','*','.','*','.','.','.','*','.','*','.','.','.','.','*','.','*','.'),
array('.','.','.','*','.','*','.','.','.','*','.','*','.','.','.','.','*','.','*','.'),
array('.','.','.','*','.','*','.','.','.','*','.','*','.','.','.','.','*','.','*','.'),
array('.','.','.','*','.','*','.','.','.','*','.','*','.','.','.','.','*','.','*','.'),
array('.','.','.','*','.','*','.','.','.','*','.','*','.','.','.','.','*','.','*','.'),
array('.','.','.','*','.','*','.','.','.','*','.','*','.','.','.','.','*','.','*','.'),
array('.','.','.','*','.','*','.','.','.','*','.','*','.','.','.','.','*','.','*','.'),
);
foreach ($r as $value)
{
$value = rand(0,19);
if ($value<=19)
    {
    $r[$value]++;
    }
}
print_r($r); 

我也尝试过mt_rand但这也无济于事,但它根本不是随机的。还有没有办法简化此代码,而不是每次都编写数组。我也可以使用谢谢把它变成盒子的形式吗

我不确定这是否是您要查找的,但是这里有一些输出类似于您的数组的东西。

    <?php
    // Config
    $rows = 20;
    $cols = 20;
    $mines = 100;
    // Error checking
    if ( ($rows * $cols) <= $mines ) {
        die("Error: There are too many mines to fit on this minefield!");
    }
    // How many spaces are not occupied by mines?
    $not_mines = ($rows * $cols) - $mines;
    // Build a string like "....***", with length corresponding to rows/cols/mines.
    $mine_string = str_repeat('.', $not_mines);
    $mine_string.= str_repeat('*', $mines);
    // Randomize the string.
    $mine_string = str_shuffle($mine_string);
    // Display the string in rows/column format
    for ( $y = 0; $y < $rows; $y++ ) {
        for ( $x = 0; $x < $cols; $x++ ) {
            // the position of the string to take a character from
            $pos = ($y * $cols) + $x; 
            // get one character from the string
            echo substr($mine_string, $pos, 1);
        }
        // End of a row, break to new column
        echo '<br>';
    }

输出(每次不同(:

....*..**......*.*.*
.*.........*.***...*
.*..**......**.*....
.......*.*....***...
**....**...**.......
.......*..**.**.....
*.*....*.....*.*...*
....**.....**...*.*.
.*...*....*.*..*..*.
..*......**.*....**.
*..*...*...........*
.*..*...*........*..
.....*..........*..*
.***..*..***........
...*.....***........
***...........*..*..
.*...*..*.....*.*...
....*.......*.*...*.
.............**.....
...*........**...*..
$size = 20;
$count_mines = 10;
$one_dimensial_map = array_fill(0, $count_mines, '*') + array_fill(0, $size * $size, '.');
shuffle($one_dimensial_map);
$two_dimensial_map = array_chunk($one_dimensial_map, $size);
print_r(array_map('json_encode', $two_dimensial_map)); // just for output
function generateRandomString($length = 20) {
$characters = '.....*...***..***.*.*';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
    $randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
for ($i = 0; $i <20; $i++)
{
echo generateRandomString();
echo "<br>";
}

这样做了,得到了所需的答案。谢谢