text — array_rand без повторения в переполнении стека

Я работаю с моим кодом, который позволит пользователю вводить слово, и каждая буква слова будет давать значение.

Пример: пользователь ввел текст «APPLE».
Выход:

A - arc
P - priest
P - president
L - lion
E - escape

Значение каждой буквы будет в массиве.

У меня уже есть мой код здесь, но смысл повторяется.

Пример:

A -  **Arrow**
L -  Love
A - **Arrow**
S - Soul

Вот мой код

<?php
$chars = str_split("APPLE");
foreach($chars as $char){
if (substr($char, 0, 1) === 'A')
{
$meaning = array("Angel","Ancient","Arrow");
echo $meaning[array_rand($meaning)];
}
}
?>

0

Решение

Вы можете временно отключить его внутри петли, чтобы не было дуплекса. Пример:

$chars = str_split("APPLE");
$words = array(
// its up to you what words you want to map
'A' => array("Angel","Ancient","Arrow"),
'E' => array('Elephat', 'Eardrum'),
'L' => array('Level', 'Laravel', 'Love'),
'S' => array('Sweet', 'Spicy', 'Savy'),
'P' => array('Powerful', 'Predictable', 'Pass', 'piss')
);

foreach($chars as $char){
$random_key = array_rand($words[$char]); // get random key
$key = $words[$char][$random_key]; // get the word
unset($words[$char][$random_key]); // unset it so that it will never be repeated
echo "$char - $key <br/>";
}
0

Другие решения

Вы можете сохранить «кеш» массив ранее использованных терминов. Пример:

<?php
$chars = str_split("APPLE");
$used_terms = array();
foreach($chars as $char){
if (substr($char, 0, 1) === 'A') {
$meaning = array("Angel","Ancient","Arrow");
do {
$term = $meaning[array_rand($meaning)];
} while (in_array($term, $used_terms));
$used_terms[] = $term;

echo $term;
}
}
?>
0

По вопросам рекламы [email protected]