Ошибка цикла PHP — зациклена только часть цикла?

#php #loops

#php #циклы

Вопрос:

Я и несколько друзей, проходящих один и тот же курс программирования, были смущены этим в течение нескольких часов, надеюсь, кто-нибудь здесь сможет помочь. Цель состоит в том, чтобы взять список URL-адресов, разделить их на новые строки, добавить [ img] и добавить [/ img] для каждого URL-адреса, подходящего для доски объявлений. Фактический код включает переключатель, позволяющий использовать как [img], так и [thumb] bbcodes, но оба имеют одинаковый эффект. Вместо вывода

 [ img]1[/ img]
[ img]2[/ img]
 

выводит

 [ img]1
2[ /img]
 

То же самое происходит для любого количества URL-адресов. Вот код, который я использую.

    <?php

    $url_f = (isset($_POST['text'])) ? $_POST['text'] : false;
    $thumb = (isset($_POST['type'])) ? $_POST['type'] : false;
    $urls = ($url_f) ? explode('n',$url_f) : '';

    ?>

    <textarea rows='20' cols='40' readonly='1'>


    <?php
    switch ($thumb){
        case 'img':
            for ($i = count($urls)-1; $i >= 0; $i--)
            {
                echo "[img]". $urls[$i] ."[/img]n";
            }
            break;

        default:
            break;

        case 'thumb':
            for ($i = count($urls)-1; $i >= 0; $i--)
            {
                echo '[thumb]'. $urls[$i] ."[/thumb]n";
            }
            break;

    }

    ?>

    </textarea>
 

Комментарии:

1. default должно быть последним, вы знаете, иначе он пропустит что-либо за его пределами.

2. В этом случае не похоже, но спасибо за совет.

3. Этот переключатель действительно напуган. Также лично никогда не видел значения по умолчанию ни для чего, кроме последней строки переключателя {}. Действительно ли $url заполняются так, как ожидалось?

4. Да, я пробовал повторять $urls[0], $ urls [1] И т. Д., Все они работают нормально.

Ответ №1:

Существует три разных типа новых строк: r, n и r n . Я не занимаюсь веб-разработкой, но разные операционные системы все равно, вероятно, будут отправлять разные новые строки, поэтому вам придется выполнить некоторую проверку, чтобы выяснить, с какими символами нужно разделить.


В вашем коде, поскольку n не работает, новая строка, вероятно, rn или r .

Редактировать: проблема может быть в строковом литерале в одинарных кавычках.

Комментарии:

1. Это имеет смысл. Как бы я проверил? Могу ли я просто разорвать его, а затем проверить длину?

2. Я что-то пропустил, так как давно не касался PHP. Используемые вами одинарные кавычки следует заменить двойными кавычками, чтобы escape-последовательности работали. Попробуйте это, и, если проблема все еще существует, я опубликую код.

3. Ааааа! Боже, напоминает мне, почему я так ненавижу PHP. Часами размышлять о разнице между одинарными и двойными кавычками… Это исправлено. Большое спасибо всем, кто помог.

4. @user1013452: это не просто PHP-изм. Многие (большинство? все?) языки сценариев, которые используют $ для переменных, различают ' " строки и .

Ответ №2:

Ваша проблема 'n' !== "n" в том. Первая обрабатывается как «обратная косая черта n», в то время как последняя обрабатывается до символа перевода строки (ASCII 0xA, bein LF). Для получения дополнительной информации см. Строки в двойных кавычках.

Что касается вашего цикла, вы можете заглянуть в foreach .