Тайный Санта в PHP
Всем вечера) В общем, есть задание написать простецкого тайного санту в php без рассылку по мейлу. в принципе, снизу код и фотка, что получается. вопрос у меня в следующем, я не секу, как сделать вывод нормальным, чтобы в результате выходило например "Fabi = Sebi". Только попрошу с конкретикой, не скажу, что ультра-сильна в программировании, нуждаюсь в четкой инструкции
<?php
$namen = array("Fabi", "Leo", "Stranzl", "Olya", "Moritz", "Sebi", "Peier", "Gerald");
$namen2 = [];
for ( $i = 0; $i < count($namen); $i++) {
echo $namen[$i] . "<br>";
}
for ( $i = count($namen)-1; $i >= 0; $i--){
$namen2[] = $namen[$i];
}
var_dump($namen2);
$size = count($namen);
for ( $i=0; $i > $size; $i++ ) {
$random = rand(0, count($namen)-1);
if ($namen[$i] != $namen [$random]) {
$namen [$i] = $namen[$random];
echo "Eintrag" . $i . "Jetzt an Stelle" . $random . "<br>"; }
}
?>
Ответы (1 шт):
Автор решения: NoSkill
→ Ссылка
Можно проще:
// Исходный массив
$namen1 = array("Fabi", "Leo", "Stranzl", "Olya", "Moritz", "Sebi", "Peier", "Gerald");
// Копируем исходный массив
$namen2 = $namen1;
// Перетасовываем скопированный массив
shuffle($namen2);
// Выводим попарно из исходного и скопированного массивов
for ($i = 0; $i < count($namen1); $i++) {
echo $namen1[$i] . ' будет Тайным Сантой для ' . $namen2[$i] . '<br>';
}
Но в таком случае, кто-то может оказаться Сантой для самого себя. Поэтому нужно проверять такой случай и искать для каждого человека уникального Санту:
// Исходный массив
$namen1 = array("Fabi", "Leo", "Stranzl", "Olya", "Moritz", "Sebi", "Peier", "Gerald");
// Копируем исходный массив
$namen2 = $namen1;
// Играют более одного человека
if (count($namen1) > 1) {
for ($i = 0; $i < count($namen1); $i++) {
// Ищем уникального санту:
do {
$random = rand(0, count($namen2) - 1);
} while ($namen1[$i] == $namen2[$random]);
// Выводим
echo $namen2[$random] . ' будет Тайным Сантой для ' . $namen1[$i] . '<br>';
// Вычеркиваем санту
unset($namen2[$random]);
// Нормализуем массив
$namen2 = array_values($namen2);
}
}
