$letter) { $letter = strtolower($letter); if (!array_key_exists($key + 1, $letters)) { continue; } $nextLetter = strtolower($letters[$key + 1]); if (!(array_key_exists($letter, $table) && array_key_exists($nextLetter, $table[$letter]))) { $table[$letter][$nextLetter] = 1; continue; } $table[$letter][$nextLetter] = $table[$letter][$nextLetter] + 1; } } return $table; } function generateMarkovName($table, $minLength = 3, $maxLength = 10) { $currentLetter = array_rand($table); $text = [$currentLetter]; $length = mt_rand($minLength, $maxLength); for ($i = 0; $i < $length; $i++) { $nextLetter = $this->getRandomWeightedElement($currentLetter, $table); if (count($text) > 1) { $previousLetter = $text[$i - 1]; while ($previousLetter == $nextLetter) { $nextLetter = $this->getRandomWeightedElement($currentLetter, $table); } } $text[] = $nextLetter; $currentLetter = $nextLetter; } return ucfirst(implode('', $text)); } function getRandomWeightedElement($key, array $table) { if (array_key_exists($key, $table)) { $weightedValues = $table[$key]; $rand = mt_rand(1, (int) array_sum($weightedValues)); foreach ($weightedValues as $key => $value) { $rand -= $value; if ($rand <= 0) { return $key; } } } return array_rand($table); } public function generateName() { $names = [ 'Gronkh', 'Currywurst', 'KingOfDog', 'Zeybe', 'unge', 'Dner', 'Arazhul', 'Hopson', 'Carykh', 'Benx', 'Demaster', 'Manucraft', 'Minecraft', 'ProPlayer91', 'Green', 'Blue', 'Red', 'Ultra', 'Pro', 'Racing', 'Shooter', 'King', 'Yellow', 'Gold', 'xXXx', 'iTz_', 'Running', 'YT', 'TV', 'HD', 'Huge', 'Best', 'imFlying', 'Not' ]; $table = $this->generateMarkovTable($names); echo str_pad($this->generateMarkovName($table, 4, 7), 12); } }