单词洗牌算法(PHP或javascript)

单词洗牌算法(PHP或javascript),javascript,php,algorithm,shuffle,word,Javascript,Php,Algorithm,Shuffle,Word,目前我正在制作一款游戏,进展非常顺利。 问题是我的洗牌算法。一个单词应该随机排列 但是不能在其原始词形中混叠。示例:“表格”->“表格” 我想要这样的东西:“表格”->“tlabe” 第一个字母和最后一个字母应该保持在原来的位置,但其余的字母可以随机移动,除了它原来的字型 目前我正在使用我编写的此函数: function shuffle_word($word) { if(strlen($word) < 2) return $word; else

目前我正在制作一款游戏,进展非常顺利。
问题是我的洗牌算法。一个单词应该随机排列
但是不能在其原始词形中混叠。示例:“表格”->“表格”
我想要这样的东西:“表格”->“tlabe”

第一个字母和最后一个字母应该保持在原来的位置,但其余的字母可以随机移动,除了它原来的字型

目前我正在使用我编写的此函数:

function shuffle_word($word)
{
    if(strlen($word) < 2)
        return $word;
    else
        return $word{0} . str_shuffle(substr($word, 1, -1)) . $word{strlen($word) - 1};
}
函数shuffle\u单词($word)
{
if(strlen($word)<2)
返回$word;
其他的
返回$word{0}.str_shuffle(substr($word,1,-1))。$word{strlen($word)-1};
}
到目前为止,您可以查看我的游戏并对其有更好的了解:


(很抱歉,目前单词是德语,因为我是德语,与朋友一起测试会更容易)

一种更简单的方法是使用拆分所有字符,然后使用函数对获得的数组进行洗牌,然后再对数组进行洗牌,这样您的单词就被洗牌了
示例代码:

function shuffle_word($word) {
   $chars = str_split($word);
   shuffle($chars);
   if(implode("", $chars) == $word) return shuffle_word($word);
   return implode("", $chars);
}

祝你度过愉快的一天

一种更简单的方法是使用拆分所有字符,然后使用函数洗牌获得的数组,然后再洗牌数组,这样你的单词就洗牌了
示例代码:

function shuffle_word($word) {
   $chars = str_split($word);
   shuffle($chars);
   if(implode("", $chars) == $word) return shuffle_word($word);
   return implode("", $chars);
}

祝你们今天愉快

谢谢你们的快速回答。我通过在while循环中检查洗牌单词是否等于非洗牌单词来修复算法。

谢谢你们的快速回答。我通过在while循环中检查洗牌单词是否等于非洗牌单词来修复算法。

问题出在哪里?将洗牌单词存储在一个变量中,并将其与您的
$word
进行比较。如果它们是相同的,则重新洗牌。该词通常以其原始词形洗牌。我不希望发生这种情况,否则就没有什么可猜测的了。显然,第一个问题可能是你在洗牌字节,而不是字符;也没有任何检查来查看洗牌是否返回了相同的顺序bytes@MrDarkLynx这听起来很有帮助,也很简单。谢谢,我将测试它有什么问题?将无序单词存储在变量中,并将其与
$word
进行比较。如果它们是相同的,则重新洗牌。该词通常以其原始词形洗牌。我不希望发生这种情况,否则就没有什么可猜测的了。显然,第一个问题可能是你在洗牌字节,而不是字符;也没有任何检查来查看洗牌是否返回了相同的顺序bytes@MrDarkLynx这听起来很有帮助,也很简单。谢谢,我会测试的这是一个可怕的修正,这是一个可怕的修正。