Всем добрый день! Неделю назад начал изучать PHP, и мне необходимо реализовать такую задачу: Создайте форму с method=”post”. В форме должны быть текстовая область (textarea) и кнопка. В обработчике необходимо принять строку из текстовой области. Создайте массив, где каждый элемент будет содержать 1 символ из переданной строки. Удалите каждый чётный элемент (то есть 0, 2, 4 и так далее). Соедините все элементы получившегося массива в одну строку и выведите её. Примечание: Должно получиться что-то наподобие этого: пришла строка «Моя строка», а выйти в браузер должно: «о тоа». Я написал что-то вроде этого, но не пойму как реализовать пункт 4 и 5. Нужно сделать это самым примитивным способом (т.е. без преобразований из строки в массив (str_split), функций и т.п.) PHP: <?php $text = false; if(isset($_POST['submit'])) { $text = htmlspecialchars($_POST['text']); for ($i = 0; $i < count($text); $i++) { $arr[] = $i; } echo $arr; } ?> HTML: <form action="<?=$_SERVER['PHP_SELF']?>" method="post"> <textarea name="text" value="<?=$text?>"></textarea> <input type="submit" name="submit" value="Отправить" /> </form>
Уверен? По-моему в задании явно сказано обратно: Ну правда, куда уж проще-то? Дернул встроенную функцию и готово.
Как нефиг делать, в общем-то, учитывая, что в php по строке можно побайтово бегать через индексы в квадратных скобках. Но если надо мультибайтовое решение, то вот же оно.
Хорошо, str_split. Преобразовал, а дальше как каждый символ в элемент массива записывать PHP: <?php $text = false; if(isset($_POST['submit'])) { $text = str_split(htmlspecialchars($_POST['text'])); for ($i = 0; $i < count($text); $i++) { $arr[] = $i; } echo $arr; } ?>
ты хочешь сказать, что ты этим кодом получил массив с символами строки? выведи его и посмотри что получилось.
получить то получил. Но он в $text лежит, а вот в $arr лежат числа от нуля и до count($text)-1 (зачем-то)
Ну а дальше все просто - беги по массиву, проверяй четность индексов. Если индекс четный - пиши соответствующий символ в результат. Четность проверяется отсутствием остатка от деления на 2. В этом тебе поможет оператор "%". То есть конструкция ($i % 2). Нет, это не оператор вычисления процентов. --- Добавлено --- Или еще более простой вариант - у $i инкрементом ставь не $i++, а $i+=2
Я не пойму что в цикле писать PHP: <?php $text = false; if(isset($_POST['submit'])) { $text = htmlspecialchars($_POST['text']); $arr = str_split($text); /*for ($i = 0; $i < split_length($arr); $i+=2) { }*/ } ?>
В предыдущем примере у вас не было проблем с тем, чтобы в цикле пойти по массиву. Теперь появились. Как так-то? Что именно не понятно? Ну или если вам готовый код нужен, а не обучение, то я могу переместить тему в соответствующий раздел.
Готового кода не нужно. Хочу сам разобраться. Сделал так, но походу высвечиваются только элементы массива (0246810) PHP: $text = false; if(isset($_POST['submit'])) { $text = str_split(htmlspecialchars($_POST['text'])); for ($i = 0; $i < count($text); $i+=2) { echo $arr[] = $i; } }
Ты присваиваешь счетчик. А надо что? Надо ячейку ранее полученного массива, номер которой совпадает со значением счетчика. Код твой почти готов. Осталось чуть чуть капельку допилить. Буквально вот граммульку. Что эта граммулька должна делать - я сказал. пробуй. Ты близок. --- Добавлено --- У тебя есть массив $text, у тебя есть счетчик $i. Тебе нужна ячейка массива $text под номером $i. Как мы обращаемся к ячейкам массива?
Ну...на деле это я ему подсказал. Но, главное не откуда инфа, а правильность применения. В данном случае - применено правильно.