Ребят, оч тупой вопрос, но я совсем запутался и не понимаю. Суть в том, что мне нужно всегда на выходе получать лишь 2 строки стиха. Почему при выводе каждый раз выдает по разному кол-ву строк, если изначально у цикла стоит значение 1, а конец назначен на 2? PHP: $word1 = array('Чудесных', 'Суровых', 'Занятных', 'Внезапных'); $word2 = array('слов', 'зим', 'глаз', 'дней', 'лет', 'мир', 'взор'); $word3 = array('прикосновений', 'поползновений', 'судьбы явлений', 'сухие листья', 'морщины смерти', 'долины края', 'замены нету', 'сухая юность', 'навек исчезнув'); $word4 = array('обретаю', 'понимаю', 'начертаю', 'закрываю', 'оставляю', 'вынимаю', 'умираю', 'замерзаю', 'выделяю'); $word5 = array('очертания', 'безысходность', 'начертанья', 'смысл жизни', 'вирус смерти', 'радость мира'); $empty = " "; for ($i=1; $i <= 2 ; $i++) { $a = array_flip($word1); $b = array_flip($word2); $c = array_flip($word3); $i = array_rand($a, 1) . $empty . array_rand($b, 1) . $empty . array_rand($c, 1); echo "$i<br/>"; }
PHP: $word1 = array('Чудесных', 'Суровых', 'Занятных', 'Внезапных'); $word2 = array('слов', 'зим', 'глаз', 'дней', 'лет', 'мир', 'взор'); $word3 = array('прикосновений', 'поползновений', 'судьбы явлений', 'сухие листья', 'морщины смерти', 'долины края', 'замены нету', 'сухая юность', 'навек исчезнув'); $word4 = array('обретаю', 'понимаю', 'начертаю', 'закрываю', 'оставляю', 'вынимаю', 'умираю', 'замерзаю', 'выделяю'); $word5 = array('очертания', 'безысходность', 'начертанья', 'смысл жизни', 'вирус смерти', 'радость мира'); $words = [$word1, $word2, $word3, $word4, $word5]; $count = count($words); $text = null; $sep = ' '; for($i = 0; $i < $count; $i++) { $text .= $sep . $words[$i][array_rand($words[$i])]; } echo $text;
в моём понимании моя система должна была работать так, что на 17 строке, я расписываю как эта самая переменная i должна у меня выглядеть на выходе (из рандомных слов с первых 3 массивов) и повторяться должна 2 раза, для этого то я и создал цикл из 2 шагов, вот --- Добавлено --- благодарю! буду разбираться
Через жопу сделано потому что. Если у тебя $i для индекса, то не надо её под результирующую строку использовать. Ошибка в 17 строке. А если оценить вообще, то криво сделано. 1. Зачем array_flip делать каждый раз в цикле? Это нужно вынести из цикла. 2. Вообще array_flip здесь лишний. Тебе нужно получить рандомное значение из массива. Самый короткий путь: PHP: for ($i=1; $i <= 2 ; $i++) { echo $a[array_rand($a)].' '.$b[array_rand($b)].' '.$c[array_rand($c)].'<br/>'; } P.S. Когда что-то работает не так, как ожидается, сначала нужно найти место возникновения ошибки. Бинарный поиск - самый быстрый способ для этого. Суть бинарного поиска в том, что ты все время делишь нечто пополам выбираешь половину в которой искомое тобой продолжает оставаться и дальше продолжаешь работу с этой половиной, потом с половиной половины и т.д. пока не найдешь проблему. На твоем коде. ошибка в цикле, поэтому сразу можно взять только эту часть. Убираешь половину кода и смотришь пропала ли ошибку. Если так сделать, то сразу понятно, что ошибка во второй половине цикла, так ты быстро бы наткнулся на свою 17 строку.