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

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
Спроси у Монса, что он использовал, он баловался со смайлами с разнообразным текстом.
Может намного упрощеннее есть что-либо?!!!
 
Неудивительно — $strings === null, поэтому и ошибка.

PHP:
$strings = NULL;
//...
$strings[$strcount];
 
$strings = null - объявил пустой массив до начала цикла, при первом проходе он начинает заполняться, если убрать эту строку появляется + 3 нотиса Undefined variable: strings , а так появляется только Undefined offset на каждую строчку
 
Сделай $strings = array();
 
У тебя нотисы сыпятся из-за того, что ты пытаешься как раз таки в трех местах получить из переменной $strings строку, обращаясь к переменной $strings как к массиву:
PHP:
$strings[$strcount];
Но т.к. эта переменная 1) не является массивом 2) в случае $strings = array(); не имеет значений, т.е. является пустым массивом, вылетают нотисы.
Вот тебе информация для размышления :)
 
я правда понимаю о чем ты говоришь, но тут дело не в этом :)
у меня появляются нотисы при каждом проходе цикла те сколько получается строк столько и нотисов и обрати внимание что пишет - Undefined offset и указывает на строчку
PHP:
$strings[$strcount] = $strings[$strcount] .' '. $word;
те нотисы за которые ты пишешь - Undefined variable: strings, у меня они при объявлении через NULL не появляются. таких нотиса может быть всего три, потамучто после первого прохода данная переменная заполняется, а у меня столько нотисов сколько получается в итоге строк :)
 
Я и говорю именно про Undefined offset — эта ошибка возникает, когда обращаешься к несуществующему элементу массива.
Не забывай, что в if...else statement у тебя там инкремент переменной $strcount, так что следующую итерацию обращение может быть к другому ключу, а значит новая ошибка вылетит.
 
Назад
Сверху