我收集了一个表单字段字符串条目,例如。$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上面的代码片段结果,我只想使用这些结果来帮助以正确的顺序输出相应的段落。谢谢。
发布于 2018-08-29 21:54:07
我猜你会想要这样的东西?
<?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_*函数。
https://stackoverflow.com/questions/52078769
复制相似问题