【问题标题】:How to check if data already exists then randomly generate new data from an Array如何检查数据是否已经存在然后从数组中随机生成新数据
【发布时间】:2015-06-22 20:11:19
【问题描述】:

好的,我创建了一个包含 270 多个不同字符串的数组。主要目标是从该数组中回显 60 个字符串并将它们组合起来..

例如。 1.String,1.String2。

2 个回显字符串是一个组合,应该像 1-1 和 2-2、3-3 等一样组合在一起。总共将有 30 种组合,但有 60 个字符串。

另外,我有它的方式是第一个生成的字符串应该与生成的第 31 个字符串组合

我可以使用 for 循环来做到这一点,但现在我必须使用 mysql 数据库来检查该组合是否已经存在,然后告诉随机运算符生成另一个组合,直到它找到一个不存在的组合表中已经存在。这是我目前所拥有的,但我不确定从这里去哪里。

$input = array("ITEM1", "ITEM2", "ITEM3", "ITEM4", "ITEM5"); //There are 273 items in the list
$rand_keys = array_rand($input, 60);
    $con = mysqli_connect($server, $user, $password, $name_db);
    for ($i = 0; $i <= 29; $i++) {

        $check = "SELECT * FROM contest WHERE name1 = '$input[$rand_keys[$i]]' AND name2 = '$input[$rand_keys[$i+30]]'";
        $rs = mysqli_query($con, $check);
        $data = mysqli_fetch_array($rs, MYSQLI_NUM);
        if ($data[$i] > 1) {

            //This combination already exists generate a new one until it generates one that doesn't exist
            while ($data[$i] > 1) {

                $rand_keys2 = array_rand($input, 2);
                $input[$rand_keys2[0]] = $input[$rand_keys[$i]];
                $input[$rand_keys2[1]] = $input[$rand_keys[$i + 30]];
            }
            echo $input[$rand_keys[$i]];
            echo '-';
            echo $input[$rand_keys[$i + 30]];
        } else {

            echo $input[$rand_keys[$i]];
            echo '-';
            echo $input[$rand_keys[$i + 30]];
        }
    }

到目前为止,这就是我所拥有的,我很确定我的错误出现在 mysql 语句中,任何人都可以为我解决这个问题,其余部分可能还有很多错误。我才刚刚开始,所以如果你看到它们,请不要介意一些菜鸟错误。顺便说一句,当我运行它时,它只是一个空白页。

【问题讨论】:

  • 如果您认为查询中有错误,请使用$rs = mysqli_query($con, $check) or die(mysqli_error($con));
  • “顺便说一句,当我运行它时,它只是进入一个空白页面。” - 这通常与语法错误有关,但你没有检查它们,也没有显示它们。在您打开 PHP 标记(例如 &lt;?php error_reporting(E_ALL); ini_set('display_errors', 1);)之后将错误报告添加到文件顶部,然后是其余代码,以查看它是否产生任何结果。
  • 不要永远尝试从字符串中获取 php 数组数据!!!! '$input[$rand_keys[$i]]' 应该是 '".$input[$rand_keys[$i]]."''{$input[$rand_keys[$i]]}'
  • 老爷,希望我现在可以说。尝试转义您的数据,可能会有 MySQL 正在处理的字符,或者尝试 WHERE name1 = '{$input[$rand_keys[$i]]}'WHERE name1 = '".$input[$rand_keys[$i]]."' 等...换另一个。我在这里陷入了死胡同,对不起。编辑:似乎@Twister1002 和我有同样的想法;我们同时输入了它,哈哈
  • @Fred-ii- 是的,它现在正在显示数据,谢谢!

标签: php mysql arrays mysqli


【解决方案1】:

在我个人看来,永远不要尝试从引号内的数组中获取数据!总是在引号之外做;特别是在多宗派数组中。

'$input[$rand_keys[$i]]' 应重写为 '".$input[$rand_keys[$i]]."''{$input[$rand_keys[$i]]}'

在我看来,最好在引号之外而不是使用{ }

【讨论】:

  • 我很感激@Fred-ii-。你基本上是在正确的轨道上。不过,当我看到这个问题时,我的第一个想法是引号内的数组。
  • 不客气。我很高兴这个问题得到了解决。我的想法已经用完了大声笑干杯
猜你喜欢
  • 1970-01-01
  • 2014-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-21
  • 2020-02-04
  • 2015-07-12
  • 1970-01-01
相关资源
最近更新 更多