PHP 使用单词中的字符以正确的顺序输出相应的段落



我收集一个表单字段字符串条目,例如。$Name我希望计算该单词中的字符,然后针对该单词中的每个字符在新部分中显示与每个字符相关的一些文本信息。例如,如果他们输入Max我就会有一段关于m的文本,一段关于a的段落,一段关于x

到目前为止,我使用这些:

$Letters = (str_split($Name));
<?php foreach ($Letters as $value) {
echo "value <br>";
} ?> // shows each letter 
<?php echo mb_strlen ($Name) ?> // prints number of characters in entry 
<?php if (mb_strlen ($Name) > 2): ?> 
*code to make additional text section if $Name has more than eg 2 characters 
<?php endif; ?> //new text section created for eg third letter
<?php echo $Name[2]; ?> // prints third letter of name in the newly created 
//section in this case
<?php echo strpos($Name, "a")?> // will tell me "a" appears in second 
//place in example "Max"

但是,为每个$Name字母调用相关文本块并将其按正确的顺序放置(假设这些文本块写入同一代码文件中(的有效方法是什么?我不想像目前发生的那样在输出中echo上面的代码片段结果,我只想使用这些结果来帮助以正确的顺序仅输出相应的段落。谢谢。

我猜你会想要这样的东西吗?

<?php
$texts = [
'a' => 'text about a',
'b' => 'text about b',
// etc
];
$name = 'something';
// Loop over all letters.
for ($i = 0; $i < mb_strlen($name); $i++) {
$letter = mb_substr($name, $i, 1); // Get current letter.
$text_for_letter = $texts[$letter] ?? null; // Get the text for this letter from the array of texts.
if ($text_for_letter) {
echo 'Text for letter ' . $letter . ' is: ' . $text_for_letter;
}
}

有关正在发生的事情的一些背景信息:

我们使用mb_strlen()而不是strlen(),使用mb_substr()而不是str_split(),因为它们涵盖了 UTF-8 字符的使用。 当某些 UTF-8 字符用作输入时,strlen()str_split()会中断,因为这些字符可能由多个字节组成(例如来自某些外来字母的字符(,这些字节不能被非多字节就绪函数和函数很好地解释,例如strlen()可能认为单个字符实际上是两个字符。

在这里,我假设您正在使用 UTF-8 输入。如果您确定不是,则可能不需要mb_*函数。

最新更新