如何在PHP中生成*&的随机模式

如何在PHP中生成*&的随机模式,php,logic,Php,Logic,您好,我正在制作一个程序,让我帮助生成一个具有指定限制的随机字符串和*的随机字符串,但是*的组合不应该重复 例:如果输入3,则O/p应为 #** **# **# 它应该生成一个长度为3到3行的随机字符串,具有不同的模式,并且模式不应该重复。我正在使用下面的代码,但无法实现它 $n = 3; for($i = 0; $i < n; $i++) { for($j=0;$j<=$n;j++) { echo "*#"; }

您好,我正在制作一个程序,让我帮助生成一个具有指定限制的随机字符串和*的随机字符串,但是*的组合不应该重复

例:如果输入3,则O/p应为

#**
**#
**#
它应该生成一个长度为3到3行的随机字符串,具有不同的模式,并且模式不应该重复。我正在使用下面的代码,但无法实现它

$n = 3;
for($i = 0; $i < n; $i++)
  {
     for($j=0;$j<=$n;j++)
       {
          echo "*#";
       }
     echo "<br />";
  }

但是我无法生成输出,我的逻辑哪里出故障了?

如果要确保同一模式不会出现多次,则必须保留生成字符串的记录。最基本的形式可能是这样的:

public function generate() {
    $amount = 3;  // The amount of strings you want.
    $generated_strings = []; // Keep a record of the generated strings.
    do {
        $random = $this->generateRandomString(); // Generate a random string
        if(!in_array($random, $generated_strings)) { // Keep the record if its not already present.
            $generated_strings[] = $random;
        }
    } while(sizeof($generated_strings) !== $amount); // Repeat this process until you have three strings.

    print_r($generated_strings);
}


public function generateRandomString($length = 3) {
    $characters = '*&#';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}

您可以使用while循环和独特的数组来实现这一点。 我首先有一个可能包含字符的数组。 然后我循环,直到结果数组达到所需长度。 我使用array unique删除循环中的任何重复项。 我使用rand0,2从可能的字符数组中选择一个随机字符

$arr = ["*", "&", "#"];
$res = array();

$n =7;

While(count($res) != $n){
    $temp="";
    For($i=0;$i<$n;$i++){
         $temp .= $arr[Rand(0,count($arr)-1)];
    }
    $res[] = $temp;
    $res = array_unique($res);
}

Var_dump($res);

更新了OP未明确指定的超出范围的详细信息。

不一定是最优化的算法,但它应该可以工作

我使用的是一个字符串生成器,有点随机,它结合了您提供的字符。第二部分是用生成的尚未出现的字符串填充输出数组

<?php

function randomize($n) {
  $s = '';
  for ($i = 0; $i < $n; $i++) {
    $s. = (rand(0, 10) < 5 ? '*' : '#');
  }
  return $s;
}


$n = 3;
$output = array();
for ($i = 0; $i < $n; $i++) {
  $tmp = randomize($n);
  while (in_array($tmp, $output)) {
    $tmp = randomize($n);
  }
  $output[] = $tmp;
}
print_r($output);

你在每次迭代中都重复同样的内容我已经按照我的逻辑更新了代码,但它仍然不起作用。你的问题写得不清楚。您说行应该是唯一的,但您希望******。请更新您的问题,以便将来的读者不会感到困惑。您的代码不会运行。A$不见了,第4行的点是misplaced@mickmackusa代码是不言自明的,但我将尝试添加一个对正在发生的事情的描述:工作完全符合我的要求,但它背后的逻辑是什么?我在//behing the line中添加了一些解释。是否有一个特定的部分你不能遵循?嗯,是的,我得到了代码解释,我在哪里可以找到一些更具挑战性的代码,像这样,以保持我的逻辑刷?嗯,只要尝试谷歌搜索练习/在线课程/书籍/等。如果我输入7,那么行应该是7,生成的字符串的长度应该是7你没有说过。在你的问题中,没有一处提到字符串的长度。你的问题说它应该生成一个长度为3的随机字符串,而不是它依赖于$n值@Akshay请重新阅读问题3是一个变量,请删除我提到的否决票clearly@Akshay你现在可以取消你的否决票了,我已经更新了代码,也删除了你对这个问题的否决票,并删除了这个评论