Я собираю запись в поле формы, например. $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. strlen()
а также str_split()
будет прерываться, когда определенные символы UTF-8 используются в качестве входных данных, потому что эти символы могут состоять из нескольких байтов (например, символов из некоторых иностранных алфавитов), которые плохо интерпретируются не готовыми к многобайтовым функциям функциями, такими как strlen()
Можно подумать, что один символ на самом деле два символа.
Здесь я предполагаю, что вы работаете со входом UTF-8. Если вы уверены, что это не так, вам могут не понадобиться функции mb_ *.
Других решений пока нет …