В вашем коде есть несколько ошибок. Я начну с первого сегмента.
В вашем for
состоянии вы используете $tokenArray
вместо $tokensArray
(отсутствует s
) в вашем count()
.
В вашем последнем эхо, поскольку вы используете составную переменную ($tokensArray[$i]
), вы должны заключить ее в фигурные скобки следующим образом: {$tokensArray[$i]}
Исправлен код для первой части:
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>";
}
Существует также несколько улучшений производительности, которые могут улучшить читаемость и упростить ваш код.
Поскольку для разделения строки используются символы, используйте explode()
вместо split()
. split()
использует регулярное выражение для разделения строки по сравнению с explode()
, которое просто использует простые символы.
Целое $fieldWords
разделение и цикл можно заменить одним вкладышем:
echo str_replace('_', ' ', $tokensArray[$i]);
- Вы разделяете строку
$story
вручную, когда использование регулярного выражения будет намного проще:
preg_match_all('/\*\w+/m', $story, $tokensArray);
$tokensArray = $tokensArray[0];
$tokens = implode(' ', $tokensArray); // Space delimited list of tokens