cellat "kelime"

5 Cevap php

Sana bir mektup tahmin zaman, bu mektup ne bir çizgi yerine cellat benzer bir şey yapmaya çalışıyorum. Ben bir yol ile geldi, ama çok verimsiz görünüyor ve daha iyi bir yolu olup olmadığını merak ediyorum. İşte ne var -

<?
$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_replace ne istiyorum tersini yapar. Ben $ finalWord değeri ben arzu sonuç almak için bir php döngü üzerinden gitmek zorunda kalmadan ne istiyorsun.

5 Cevap

Birazdan seni takip ediyorum Eğer ilk satırın tersini yapmak istiyorum:

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

Neden $opposite = range('a', 'z'); bir dizi oluşturmak ve daha sonra size unguessed harflerin bir dizi verecek olan, array_diff () $ lettersGuessed karşı kullanmayın. Kesinlikle kod birkaç satır kaydetmek istiyorsunuz. Gibi:

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

Bu bir dizi var, foreach ben bile bir sorun değil bir şey üzerinde takıyorsun düşünüyorum, zaten yıldırım hızlı, yapıyor olması varsayalım konum budur.

Eğer kolayca dizideki indeksler doğrudan dizesinde hangi yer _ bir mektup haline gelmelidir ilişkilendirir harfi içeren olanlar hangi söyleyebilirim becuase bir dizi kullanmak istiyorum.

Sizin foreach döngü bunu yapmak için iyi bir yoldur. Sözlerin büyük olmayacak çünkü yavaş olmayacak.

Ayrıca bu harflerin dışında her şeyi değiştirmek için tahmin harflerle bir regex desen oluşturabilirsiniz. Bu gibi:

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

Başka bir yol, bir dizi, örneğin gibi dize erişmek olacaktır

$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

Kod yapı bu parça doğru tahmin harfleri içeren bir dize kullanabilirsiniz.

$word = 'ball';
$guessed = array('b','a');
$out = "";

foreach (str_split($word) as $char)
{
  if in_array($char, $guessed)
    $out += $char;
  else
    $out += "_";
}

echo $out; // ba__