Дополнительный элемент списка в цикле PHP foreach - PullRequest
1 голос
/ 21 ноября 2010

Работа с базовым списком типов вещей.Все на нем прекрасно работает, за исключением того, что он вставляет пустой <li></li> внизу списка.Я использую разделитель возврата каретки и пытался использовать str_replace для удаления возврата каретки из цикла.Но это не совсем работает.Я что-то упускаю по этому поводу?Или любые предложения, как удалить этот плагин.

Вот файл обработчика формы

$name = $_POST[ 'name' ];
$guests = $_POST[ 'guests' ];
$data = "$name $guests\r";
$open = fopen("list.txt", "a");
fwrite($open, $data);
fclose($open);

Файл вывода PHP

    $file = "list.txt";
    $open = fopen($file, 'r');
    $data = fread($open, filesize($file));
    fclose($open);

    $list = explode("\r", $data);
    $string = str_replace("\r", "", $list);

    foreach($string as $value) {
        echo '<li>'.ucwords($value).'</li>'."\n";
    }

А вот как выглядит разметкаВывод PHP

<li>Person One 1</li>
<li>Person Two 4</li>
<li>Person Three 2</li>
<li></li>

Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

4 голосов
/ 21 ноября 2010

Вот один из способов защиты кода для пустых значений ...

foreach($string as $value) 
{
    //to be really foolproof, let's trim!
    $value=trim($value);

    //only output if we have something...
    if (!empty($value))
    {
        echo '<li>'.ucwords($value).'</li>'."\n";
    }
}
2 голосов
/ 21 ноября 2010

Используйте обрезку, чтобы обрезать концы вашей строки до взрыва

$list = explode("\r", trim($data));
1 голос
/ 21 ноября 2010

Удалите вызов str_replace и просто пропустите элементы, которые ничего не содержат, или только пробельные символы:

foreach($string as $value) {
    if (!preg_match("/^\\s*$/", $value)) {
        echo '<li>'.ucwords($value).'</li>'."\n";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...