PHP Использование символов из слова для вывода соответствующих абзацев в правильном порядке - PullRequest
0 голосов
/ 29 августа 2018

Я собираю запись в поле формы, например. $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 приведенный выше фрагмент привел к выводу, как это происходит в настоящее время. Я просто хочу использовать эти результаты, чтобы помочь выводить только соответствующие абзацы в правильном порядке. Спасибо.

1 Ответ

0 голосов
/ 29 августа 2018

Полагаю, вы хотите что-то подобное?

<?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_ *.

...