запись циклом в массив

robinner

Новичок
запись циклом в массив

Добрый вечер!

Есть текст, его нужно записать в массив в каждый элемент массива по 98 символов, но сложность для меня состоит в том что нужно каждый элемент перед записью проверить на наличие структуры ||dir||name||style||... Используя функцию str_split структура может оказаться в разных элементах массива, а мне надо чтобы она не только осталась целой, но и была в отдельном элементе.

Как решить такую задачу не могу придумать, может кто подскажет? плиз..
 

AmdY

Пью пиво
Команда форума
ты же недавно сделал такую же с пробелами
 

С.

Продвинутый новичок
И что ты хочешь от форума? Волшебную функцию? Так нет ее. Просто делай все "в лоб". Либо не с str_splitуй эту структуру сразу, либо ищи обрывки и собирай обратно.
 

robinner

Новичок
Я уже придумал, там все просто, причем очень,
только я еще не довел до ума...
придумал 2 варианта, сначала нагромоздил, заработало, но пока делал додумался до вообще простого способа и от первого отказался так как он не логичный, громоздкий и производит кучу не нужных операций

могу потом код выложить когда доведу до ума

-~{}~ 26.01.10 23:52:

хех:)
я наивный и не эрудированный....
не получилось ни фига:(

первая строка|||имя||описание||стиль|||вторая строка|||имя2||описание2||стиль2|||третья строка

Array
(
[0] => первая (не длиннее 98 символов)
[1] => строка (не длиннее 98 символов)
[2] =>
Array
(
[0] => имя
[1] => описание
[2] => стиль
)
[3] => первая (не длиннее 98 символов)
[4] => строка (не длиннее 98 символов)
[5] =>
Array
(
[0] => имя2
[1] => описание2
[2] => стиль2
)
[6] => третья (не длиннее 98 символов)
[7] => строка (не длиннее 98 символов)
)
вот такое должно получится,
 

dimagolov

Новичок
robinner, а почему "первая строка", "вторая строка", "третья строка" нужно разбивать на "не длиннее 98 символов", а все остальное нет? как понять где они начинаются?

хотя, я, похоже, догадываюсь:
1. бьешь строку explode по "|||"
2. в цикле по результату первого бьешь по "||"
2а если полученный массив в п.2 имеет более чем 1 элемент, то добавляешь его в реузльтат
2б если нет, то бьешь по пробелам, создаешь в результате массив, в него собираешь 2 строки как элементы из полученного разбиения не длиннее 98 символов каждая
 

robinner

Новичок
строки с ||| по условию не будут длиннее ну примерно 60, это максимум...
да, я бью строку explode по "|||"
это все нормально и не получаться тут не чему,
а вот дальше пошла ерунда...мучаюсь, пока что не получилось,хожу вокруг да около...

вот что пока что есть, работает не совсем верно и не до конца
работает только если $i = 0;$i<=0; или $i = 2;$i<=2; или $i = 4;$i<=4; и естественное обрабатывает только 0,2,4 элементы


$text = 'первая строка третье четветоe пятоe|||имя||описание||стиль|||вторая строка|||имя2||описание2||стиль2|||третья строка erere';
$pattern = explode("|||", $text);

for($i=0;$i<=0;$i++)
{
if(strlen($pattern[$i])>7)
{
$y = str_split($pattern[$i], 7);
$replace = array_slice($pattern, $i+1);
}
$array = array_merge($y, $replace);
}

print_r($array);

сейчас типа дорабатываю, сам не знаю, полйчится,нет, но заодно учу функции попутно

а вся эта борода это задумка для передвижения картинки админом по тексту , 98 символов примерно в одной строке на странице которая редактируется, таким образом я разбиваю текст на массив, в котором по строке в каждом элементе, и картинки в отдельных элементах в виде массива ,для обработки и передвижения.

вот типа того...не знаю может бредово,но так я мыслю:)
 

dimagolov

Новичок
robinner, я тебе написал готовый алгоритм. ты. вместо того, чтобы его реализовать, пишешь бред всякий, напимер:
PHP:
for($i=0;$i<=0;$i++)
цикл по массивам ты делай так:
PHP:
foreach($array as $element)
   echo $element;
 

robinner

Новичок
как ни крути у меня получается не
Array
(
[0] => первая (не длиннее 98 символов)
[1] => строка (не длиннее 98 символов)
[2] =>
Array
(
[0] => имя
[1] => описание
[2] => стиль
)
)

а

Array
(
[0] =>
Array
(
[0] => первая (не длиннее 98 символов)
[1] => строка (не длиннее 98 символов)
)
[1] =>
Array
(
[0] => имя
[1] => описание
[2] => стиль
)
)
 

dimagolov

Новичок
robinner, скажи, а как и где у тебя может получиться последовательность массивов? И почему тебя не устраивает ее организация в массив?
 

robinner

Новичок
ну когда разбиваю на строки по 98 получается еще один массив и вот как его элементы записать в первый массив а не элемент массива1 превратить в массив, я не догадываюсь.

ну мне это нужно чтобы потом массив(имя,описание ,стиль) передвигать вверх вниз, а если соседние от него элементы будут массивами получится ли это и если да то наверное сложнее
 

dimagolov

Новичок
посмотрел на твою структуру и понял, чего ты хочешь. ну ничего не мешает в 2а добавлять это не в общий массив результатов, а в последний массив в нем очередным элементом.
но не уверен, что тебе будет польза от такого решения. потому что позиция этого имя-стиль будет зависеть от длинны строки.
 

robinner

Новичок
не, нужно чтобы имя,описание,стиль занимали тоже положение

то есть
0,1,2,3 ... n - строки по 98 (по количеству строк)
n+1 - элемент с массивом имя,описание,стиль
и потом опять строки по 98 символов
ну и если есть еще картинка то опять тоже самое

а до этого было например
0 - длинная строка
1 - массив с имя,описание,стиль
 

dimagolov

Новичок
robinner, и что ты с подобной ерундой делать будешь? как границы строк находить будешь? а если стилей не окажется в исходных данных, тогда что?
 

robinner

Новичок
Ну стиль окажется по-любому, это предусмотрено условием, при добавлении фото.
Границы строк и не нужно искать, я бы просто двигал элементы массива, а после редактирования все собирал бы в ту же самую структуру, и при выводе пользователю заменял бы |||имя описание стиль||| на <img src="имя" title="описание" class="стиль"> и картинка в нужном месте выводилась бы с float:left или right; вот и все я уже сделал все чтобы заменяло и так далее все работает.

Но вы меня натолкнули на идею...Моя конструкция это точно ерунда(я знал это с самого начала:)), но лучше не было варианта.
но слова --- как границы строк находить будешь? натолкнули меня на следующее

Я разбиваю все str_split только для того чтобы узнать количество строк , для визуальной ориентировки админа после какой строки вставить картинку...
далее например картинка после 5 строки, 5 * 98 = 490, вот и все после 490 символа вставить картинку, пару манипуляций и готово...
ну и с заменой содержимого работать с помощью list

как такое решение?
 

AmdY

Пью пиво
Команда форума
а не не замену ли wyswig ты придумываешь? зачем тебе всё это?
 

robinner

Новичок
wyswig - что это?:)

Мне это нужно для редактирования страницы админом

в частности положение в тексте картинки

-~{}~ 27.01.10 20:58:

это редактор чтоли?
ну типа того только мне надо только с картинкой манипуляция и все
 
Сверху