Metin kutuları ve PHP ve HTML dinamik basılacak etiketler alınamıyor

3 Cevap

Bu kodu vardır ve bu bilgileri doldurmak için insanlar için metin kutuları ile etiket yazdırmak gerekir. Bu gibi bir metin alır: $ simgeleri = "* i * i * fiil" ve kullanıcıya sahip bir tablo yazdırmak gerekir:

Noun: (text box to be filled) Noun: (text box to be filled) verb: (text box to be filled) etc.

ama çalışmıyor

echo "<form action=\"storygenerated.php\" method=\"post\">
        <input name=\"fields\" type=\"hidden\" value=\"$tokens\" />
        <input name=\"story\" type=\"hidden\" value=\"$story\" />
        <table>";
for ($i = 0; $i < count($tokenArray); $i++) {
    $fieldWords = split('_',$tokensArray[$i]);
    echo "<tr><td>";
    echo $fieldWords[0];
    for ($j = 1; $j < count($fieldWords); $j++) {
        echo " ".$fieldWords[$j];
    }
    echo ":";
    echo "</td><td><input name=\"$tokensArray[$i]\" type=\"text\" /></td></tr>";
}

Metin $ belirteçleri üreten bu koddan hangi

$storyArray = split(' ', $story);
$tokens = ""; // space-delimited list of fields
$tokensArray=array();
for ($i = 0; $i < count($storyArray); $i++) {
    if ($storyArray[$i][0] == '*') {  
        $tokens .= $storyArray[$i] . " ";
        $tokensArray[] = $storyArray[$i];
    }
}

3 Cevap

Kodunuzda yanlış bir kaç şey vardır. Ben ilk segmenti ile başlayacağız.

  1. Lütfen for durumda, size $tokenArray yerine (s eksik) $tokensArray sizin count() olarak kullanıyor.

  2. {$tokensArray[$i]}: Bir bileşik değişken adını kullanarak beri son echo, ($tokensArray[$i]), sen gibi parantez içine alın gerekir

Ilk bölümü için düzeltilmiş kodu şöyledir:

echo "<form action=\"storygenerated.php\" method=\"post\">
        <input name=\"fields\" type=\"hidden\" value=\"$tokens\" />
        <input name=\"story\" type=\"hidden\" value=\"$story\" />
        <table>";
for ($i = 0; $i < count($tokensArray); $i++) {
    $fieldWords = split('_',$tokensArray[$i]);
    echo "<tr><td>";
    echo $fieldWords[0];
    for ($j = 1; $j < count($fieldWords); $j++) {
        echo " ".$fieldWords[$j];
    }
    echo ":";
    echo "</td><td><input name=\"{$tokensArray[$i]}\" type=\"text\" /></td></tr>";
}


Okunabilirliği artırmak ve kodu basitleştirmek hangi yapılabilir birkaç performans iyileştirmeleri de bulunmaktadır.

  • Kullanmak explode() yerine, sizin dize bölmek karakterleri kullanarak bu yana split(). split() sadece düz karakterleri kullanır explode() karşı dize bölmek için normal bir ifade kullanır.

  • Bütün $fieldWords bölünmüş ve döngü bir astar yerini olabilir:


echo str_replace('_', ' ', $tokensArray[$i]);
  • Normal bir ifade kullanırken elle $story dize ayıran çok basit olacaktır:


preg_match_all('/\*\w+/m', $story, $tokensArray);
$tokensArray = $tokensArray[0];
$tokens = implode(' ', $tokensArray); // Space delimited list of tokens

Ben yapmıyorum İki şey. Birincisi ben o olmasa bile bir dizi gibi, bir dize hikaye ile ilgili olmasıdır. İkinci Aslında ben yayınlanacak istedim değeri ile değişkenleri yerine değil olmasıdır. Burada bazı bilgiler yayınlanmıştır insanların yardımıyla sorunu çözdük. Hepinize teşekkür ederim.

Satırda

if ($storyArray[$i][0] == '*') {  

dize bir yıldız eşit 1 karakteri ile bir dize ise bunu ben senin $tokensArray[] her zaman boş olduğunu varsayalım sadece kontrol.

Ben satırları değiştirmek umuyoruz

echo $fieldWords[0];
for ($j = 1; $j < count($fieldWords); $j++) {
    echo " ".$fieldWords[$j];
}

ile

foreach ($fieldWords as $word) {
    echo " ".$word;
}