/** * Перемешивает строку по шаблону, строка должна иметь аказатель на начало шаблона * конец и розделитель символы между которым будут случайным образом подставлены, * вложенность шаблонов не ограничена - используется рекурсвиный обход * * @param string $startStr сама строока * @param int $offset смещение поиска * @param string $startChar символ начала шаблона * @param string $endChar символ конца шаблона * @param string $delimiter разделитель в шаьлоне * @return string */ function myShuffle($startStr, $offset = 0, $startChar = '{', $endChar = '}', $delimiter = '|') { while (($startPoint = strpos($startStr, $startChar, $offset)) !== false) { if (($endPoint = strpos($startStr, $endChar, $startPoint + 1)) !== false) { //Если есть второй указатель на начало шаблона, и он начинается раньше чем предыдущий шаблон закончился if (($secondStart = strpos($startStr, $startChar, $startPoint + 1)) !== false) { if ($secondStart < $endPoint) { $startStr = myShuffle($startStr, $secondStart - 1); } } if (($endPoint = strpos($startStr, $endChar, $startPoint + 1)) === false) { //Если нету закрывающего указателя, прекращаю цикл break; } //Я нашол открывающий и закрывающий указатели, теперь обрабатываю то что между ними $templateStr = substr($startStr, $startPoint, $endPoint - $startPoint + 1); $shuffleStr = substr($startStr, $startPoint + 1, $endPoint - $startPoint - 1); $shuffleWords = explode($delimiter, $shuffleStr); $newWord = $shuffleWords[rand(0, count($shuffleWords) - 1)]; $startStr = str_replace($templateStr, $newWord, $startStr); } } return $startStr; }
$statement->bindValue(':target', $tab[$i]); $statement->bindValue(':id', $i); $statement->execute(); } header('Location: admin.php?shuffled=1'); } if (isset($_POST['all'])) { $result = $db->exec("DELETE FROM users;"); header('Location: admin.php?deleted=all'); } else { if (isset($_POST['last'])) { $result = $db->exec("DELETE FROM users WHERE id = (SELECT MAX(id) FROM users)"); header('Location: admin.php?deleted=last'); } else { if (isset($_POST['shuffle'])) { update(myShuffle()); header('Location: admin.php?shuffled=1'); } else { if (isset($_POST['add'])) { if (!isset($_POST['firstname'])) { $err = "unset"; header('Location: admin.php?unset=1'); } else { if ($_POST['firstname'] == "") { $err = "empty"; header('Location: admin.php?empty=1'); } else { if (has_firstname($_POST['firstname'])) { $err = "doublon"; header('Location: admin.php?doublon=1'); } else {
function generate($i, $map) { $arr = coord($i); $x = $arr[0]; $y = $arr[1]; $map[$x][$y] = ' '; $next = array(); if ($x - 2 > 0) { $next[myCount($next)] = array(-2, 0); } if ($x + 2 < NODE_WIDTH - 1) { $next[myCount($next)] = array(+2, 0); } if ($y - 2 > 0) { $next[myCount($next)] = array(0, -2); } if ($y + 2 < NODE_HEIGHT - 1) { $next[myCount($next)] = array(0, +2); } myShuffle($next); foreach ($next as $d) { if ($map[$y + $d[1]][$x + $d[0]] != ' ') { $map[$y + $d[1] / 2][$x + $d[0] / 2] = ' '; generate(node($x + $d[0], $y + $d[1]), $map); } } return null; }