“刽子手”;字;在php中

“刽子手”;字;在php中,php,str-replace,strsplit,Php,Str Replace,Strsplit,我试着做一些类似于《刽子手》的事情,当你猜一个字母时,它会用字母的内容替换下划线。我想出了一个办法,但似乎效率很低,我想知道是否有更好的办法。这是我所拥有的- <? $word = 'ball'; $lettersGuessed = array('b','a'); echo str_replace( $lettersGuessed , '_' , $word ); // __ll echo '<br>'; $wordArray = str_split ( $word );

我试着做一些类似于《刽子手》的事情,当你猜一个字母时,它会用字母的内容替换下划线。我想出了一个办法,但似乎效率很低,我想知道是否有更好的办法。这是我所拥有的-

<?
$word = 'ball';
$lettersGuessed = array('b','a');

echo str_replace( $lettersGuessed , '_' , $word ); // __ll

echo '<br>';

$wordArray = str_split ( $word );

foreach ( $wordArray as $letterCheck )
{

    if ( in_array( $letterCheck, $lettersGuessed ) )
    {
        $finalWord .= $letterCheck;
    } else {
        $finalWord .= '_';
    }

}

echo $finalWord; // ba__
?>


str\u replace
做的与我想要的相反。我想要的是
$finalWord
的值,而不必经过循环就能得到我想要的结果。

这是一个数组,因为每个数组都是你应该做的,不管怎么说,它的速度都很快,我想你在痴迷于一些甚至都不是问题的东西


你想使用数组,因为你可以很容易地分辨出数组中的哪些索引是包含字母的索引,这些索引与字符串中的哪个位置直接相关,字母应该变成字母。

这是一个数组,因为每个索引都是你想做的,总之它的速度非常快,我想你在痴迷于一些甚至都不是问题的东西


您希望使用数组,因为您可以很容易地判断数组中的哪些索引包含字母,这些索引与字符串中的哪个位置直接相关,字母应该成为字母。

如果我没有听错,您希望执行与第一行相反的操作:

echo str_replace( $lettersGuessed , '_' , $word ); // __ll
为什么不创建一个数组
$contract=range('a','z')
然后对$lettersGuessed使用
array_diff()
,这将为您提供一个未使用字母的数组。它肯定会节省几行代码。例如:

$all_letters = range('a', 'z');
$unguessed = array_diff ($all_letters, $lettersGuessed);
echo str_replace( $unguessed , '_' , $word ); // ba__

如果我没听错,你想做与第一行相反的事情:

echo str_replace( $lettersGuessed , '_' , $word ); // __ll
为什么不创建一个数组
$contract=range('a','z')
然后对$lettersGuessed使用
array_diff()
,这将为您提供一个未使用字母的数组。它肯定会节省几行代码。例如:

$all_letters = range('a', 'z');
$unguessed = array_diff ($all_letters, $lettersGuessed);
echo str_replace( $unguessed , '_' , $word ); // ba__

您的foreach循环是一种很好的方法。它不会很慢,因为你的话永远不会很大

您还可以创建一个带有猜测字母的正则表达式模式,以替换除这些字母以外的所有字符。像这样:

$word = 'ball';
$lettersGuessed = array('b','a');
$pattern = '/[^' . implode('', $lettersGuessed) . ']/';   // results in '/[^ba]/
$maskedWord = preg_replace($pattern, '_', $word);
echo $maskedWord;

您的foreach循环是一种很好的方法。它不会很慢,因为你的话永远不会很大

您还可以创建一个带有猜测字母的正则表达式模式,以替换除这些字母以外的所有字符。像这样:

$word = 'ball';
$lettersGuessed = array('b','a');
$pattern = '/[^' . implode('', $lettersGuessed) . ']/';   // results in '/[^ba]/
$maskedWord = preg_replace($pattern, '_', $word);
echo $maskedWord;

另一种方法是以数组的形式访问字符串,例如

$word = 'ball';
$length = strlen($word);
$mask = str_pad('', $length, '_');
$guessed = 'l';

for($i = 0; $i < $length; $i++) {
    if($word[$i] === $guessed) {
        $mask[$i] = $guessed;
    }
}
echo $mask; // __ll
$word='ball';
$length=strlen($word);
$mask=str_pad(“”,$length,'.');
$guessed='l';
对于($i=0;$i<$length;$i++){
如果($word[$i]===$gusted){
$mask[$i]=$gusted;
}
}
echo$mask;//__陆上通信线

另一种方法是以数组的形式访问字符串,例如

$word = 'ball';
$length = strlen($word);
$mask = str_pad('', $length, '_');
$guessed = 'l';

for($i = 0; $i < $length; $i++) {
    if($word[$i] === $guessed) {
        $mask[$i] = $guessed;
    }
}
echo $mask; // __ll
$word='ball';
$length=strlen($word);
$mask=str_pad(“”,$length,'.');
$guessed='l';
对于($i=0;$i<$length;$i++){
如果($word[$i]===$gusted){
$mask[$i]=$gusted;
}
}
echo$mask;//__陆上通信线

那么您推荐什么作为解决方案?那么您推荐什么作为解决方案?PHP中是否存在正则表达式?如果是这样,您可以替换所有发生的事件或事件。(它是任何字符)带有_。在Perl中,它会是这样的:PHP中是否存在s//\gDoes正则表达式?如果是这样,您可以替换所有发生的事件或事件。(它是任何字符)带有_。在Perl中,它的运行方式如下:s//\ug/g