Bartek Naski CakePHP developer
Temat: trochę gimnastyki :)
Witam szanowne towarzystwo kejkowe :) (słodzik na początek)zrobiłem już 2 podejścia do tematu, i ogarnia mnie już zniecierpliwienie:
tekst:
bla bla bla tere fere akuku mamuku coś tam coś tam tere fere bla bla bla i taki tam tekst a pod nim lista wypunktowania
[lista]
>>>poziom pierwszy
>>poziom drugi
>>poziom drugi
>poziom trzeci
>>>poziom pierwszy
>>poziom drugi
>>>poziom pierwszy
[lista]
i znowu tekst i jakieś tam bla bla bla na 2-3 linijki
żądany wynik do użycia fajowego $this->Html->nestedList()
array(
[0] => 'pierwszy tekst...'
[1] =>array(
'poziom pierwszy'=>array(
['poziom drugi']=>''
['poziom drugi']=>'poziom trzeci')
'poziom pierwszy'=>array(
['poziom drugi']=>'')
'poziom pierwszy'=>''
)
[2] => 'znowu tekst'
)
kombinuję i nijak mi to nie wychodzi
najpierw explode po znaczniku [lista] daje mi prawidłowe 3 elementy tablicy
następnie foreach i sprawdzam czy w tablicy występuje >>> jeżeli tak to znów explode i byłoby nawet nieźle gdyby nie to że wynik mam taki i nie wiem skąd to [0]=>
array(
[0]=>pierwszy tekst
[1] => array (
[0] => ,
[1] => 'poziom pierwszy')
....
)
próbowałem z trim czy nawet obcinałem tekst z myślą że jakiś pusty znak tam jest, ale nie! zawsze jest pusty rekord w tablicy o kluczu [0], z array_combine wychodziły mi jeszcze ciekawsze sprawy. Z pozoru wydawało się proste, w myślach już kilka razy układałem algorytm ale nie wychodzi.
Chciałbym by tekst takimi listami mógł być przetykany kilkukrotnie i funkcja na tyle prosta, wręcz uniwersalna. np:
$tekst = explode('[lista]', 'tu treść ...');
foreach($tekst as $klucz => $wartosc){
if(strstr($wartosc, '>>>')){
//... tu następne explode >> i >>
}
} i byłoby idealnie...
jak ktoś coś takiego robił to proszę o podpowiedź, za trzecim podejściem spróbuję zamiast explode w foreach, preg i budowaniem nowej i nowej tablicy, albo pojedynczych segmentów i łączenia, tak czy siak albo ja listy i wypunktowania albo one mnie !
---
jedna podpowiedź padła na priv klucze nie mogą się powielać (oczywista)Bartek Naski edytował(a) ten post dnia 28.08.12 o godzinie 00:03