Перенос строки по заданной ширине

Тема в разделе "Как сделать...", создана пользователем prof.seo, 19 янв 2012.

  1. prof.seo

    prof.seo Постоялец

    Регистр.:
    25 мар 2009
    Сообщения:
    60
    Симпатии:
    20
    пишу скрипт наложения моего текста на картинку, а точнее создания изображения с моим текстом. использую GDLIB, для того чтобы мой текст не вылазил за края картинки есть необходимость разбить текст по заданной ширине, вот мой код:
    PHP:
    $size 16;
    $angle 0;
    $fontfile "Arial.ttf";
     
    $maxwidth 500;
     
    $text 'Etiam a risus et nunc ultricies consectetur vitae sit amet odio. Nam ultrices nunc non leo tristique commodo. Etiam fermentum pharetra magna, eu facilisis leo semper in. Quisque eleifend pellentesque mauris aliquam lacinia. Aliquam augue libero, tempor in consectetur vitae, porta id nisl. Donec dapibus lacinia risus ut vehicula. Nullam vitae sapien id massa tincidunt feugiat. Aliquam volutpat porta elit, suscipit pulvinar libero sollicitudin in. Sed quis augue quam. Duis quis enim magna. Aenean ac augue purus, at laoreet ante. Sed bibendum fermentum libero, in convallis augue viverra vel. Curabitur imperdiet enim quis tellus mollis adipiscing.';
     
    $words explode (' '$text);
     
    $strcount 0;
    $strings NULL;
     
    foreach(
    $words as $word) {
    $cordinat imageftbbox ($size$angle$fontfile$strings[$strcount]);
    $strlength $cordinat[2] - $cordinat[0];
     
    if (
    $strlength $maxwidth) {
        
    $tmpvar '';
        
    $tmpvar $strings[$strcount] .' '$word;
        
    $tmpcordinat imageftbbox ($size$angle$fontfile$tmpvar);
        
    $tmpstrlength $tmpcordinat[2] - $tmpcordinat[0];
        if (
    $tmpstrlength $maxwidth) {
            
    $strings[$strcount] = $strings[$strcount] .' '$word;
        }
        else {
            
    $strcount++;
            
    $strings[$strcount] = $strings[$strcount] .' '$word;
        }
    }
    }
     
    var_dump ($strings);
    впринципи все работает, но ругается на Undefined offset в строке:
    PHP:
    $strings[$strcount] = $strings[$strcount] .' '$word;
    хочу чтоб все работало четко и без ошибок, укажите где что исправить надо..
    заранее очень благодарен за потраченное время! :)
     
  2. Дмитрий Кесаев

    Дмитрий Кесаев aka Zlobniy Babko

    Заблокирован
    Регистр.:
    10 май 2007
    Сообщения:
    1.332
    Симпатии:
    1.265
    Спроси у Монса, что он использовал, он баловался со смайлами с разнообразным текстом.
    Может намного упрощеннее есть что-либо?!!!
     
    prof.seo нравится это.
  3. admLoki

    admLoki генератор случайного PHP

    Регистр.:
    14 сен 2006
    Сообщения:
    481
    Симпатии:
    93
    Неудивительно — $strings === null, поэтому и ошибка.

    PHP:
    $strings NULL;
    //...
    $strings[$strcount];
     
    prof.seo нравится это.
  4. prof.seo

    prof.seo Постоялец

    Регистр.:
    25 мар 2009
    Сообщения:
    60
    Симпатии:
    20
    $strings = null - объявил пустой массив до начала цикла, при первом проходе он начинает заполняться, если убрать эту строку появляется + 3 нотиса Undefined variable: strings , а так появляется только Undefined offset на каждую строчку
     
  5. admLoki

    admLoki генератор случайного PHP

    Регистр.:
    14 сен 2006
    Сообщения:
    481
    Симпатии:
    93
    Сделай $strings = array();
     
    prof.seo нравится это.
  6. prof.seo

    prof.seo Постоялец

    Регистр.:
    25 мар 2009
    Сообщения:
    60
    Симпатии:
    20
    получается тоже самое, что и если эту строчку вообще убрать +3 нотиса, при NULL лучше ;)
    проблема внутри цикла, я перемутил там чтото
     
  7. admLoki

    admLoki генератор случайного PHP

    Регистр.:
    14 сен 2006
    Сообщения:
    481
    Симпатии:
    93
    У тебя нотисы сыпятся из-за того, что ты пытаешься как раз таки в трех местах получить из переменной $strings строку, обращаясь к переменной $strings как к массиву:
    PHP:
    $strings[$strcount];
    Но т.к. эта переменная 1) не является массивом 2) в случае $strings = array(); не имеет значений, т.е. является пустым массивом, вылетают нотисы.
    Вот тебе информация для размышления :)
     
    prof.seo нравится это.
  8. prof.seo

    prof.seo Постоялец

    Регистр.:
    25 мар 2009
    Сообщения:
    60
    Симпатии:
    20
    я правда понимаю о чем ты говоришь, но тут дело не в этом :)
    у меня появляются нотисы при каждом проходе цикла те сколько получается строк столько и нотисов и обрати внимание что пишет - Undefined offset и указывает на строчку
    PHP:
    $strings[$strcount] = $strings[$strcount] .' '$word;
    те нотисы за которые ты пишешь - Undefined variable: strings, у меня они при объявлении через NULL не появляются. таких нотиса может быть всего три, потамучто после первого прохода данная переменная заполняется, а у меня столько нотисов сколько получается в итоге строк :)
     
  9. admLoki

    admLoki генератор случайного PHP

    Регистр.:
    14 сен 2006
    Сообщения:
    481
    Симпатии:
    93
    Я и говорю именно про Undefined offset — эта ошибка возникает, когда обращаешься к несуществующему элементу массива.
    Не забывай, что в if...else statement у тебя там инкремент переменной $strcount, так что следующую итерацию обращение может быть к другому ключу, а значит новая ошибка вылетит.
     
    prof.seo нравится это.