[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите решить задачку пожалуйста.
beclaus
Привет всем.

Есть [вот так"ой" вот] smile.gif список (похожий на директории, но это не они:

/one/two/1
/one/two/2
/one/two/three/
/one/two/three/some1
/one/two/three/some2
/one/two/four
/one/two/four/1

В общем "вложенность" у этих списокв может быть достаточно гдубокой.
Надо пройтись foreach'кой и собрать этот список в html > list (ul,li).

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

Но возможно этот вариант крайне грубый, как и сама затея. Может есть тут кто сталкивался с подобной задачей? Буду благодарен за элегантное решение.
Спасибо!


Игорь_Vasinsky
<?php
$html = '/one/two/1
/one/two/2
/one/two/three/
/one/two/three/some1
/one/two/three/some2
/one/two/four
/one/two/four/1'
;

$strings = explode(PHP_EOL, $html);

$listHTML = '';

foreach($strings as $k=>$v){
$list = explode("/", trim($v, '/'));

$listHTML .='<ul>';

foreach($list as $j=>$l){
$listHTML .='<li>'.$l.'</li>';
}

$listHTML .='</ul>';
}

echo $listHTML;


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
beclaus
Цитата (Игорь_Vasinsky @ 3.09.2015 - 12:49)
<?php
$html = '/one/two/1
/one/two/2
/one/two/three/
/one/two/three/some1
/one/two/three/some2
/one/two/four
/one/two/four/1'
;

$strings = explode(PHP_EOL, $html);

$listHTML = '';

foreach($strings as $k=>$v){
$list = explode("/", trim($v, '/'));

$listHTML .='<ul>';

foreach($list as $j=>$l){
$listHTML .='<li>'.$l.'</li>';
}

$listHTML .='</ul>';
}

echo $listHTML;

Надо подчищать проверкой каждую итерацию. Чувствую список получится оч длинный, и дублирующийся!
Игорь_Vasinsky
Цитата
и дублирующийся!

это не мои проблемы

Цитата
Чувствую список получится оч длинный

и это тоже.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
beclaus
Цитата (Игорь_Vasinsky @ 3.09.2015 - 13:46)
Цитата
и дублирующийся!

это не мои проблемы

Цитата
Чувствую список получится оч длинный

и это тоже.

В подобных ситуациях незачем было вступать в дискуссию с решениями, которые далеки даже от малой истины X)
kaww
beclaus, результат какой должен быть для приведенных входных данных? По описанию как-то не очень понятно.
Игорь_Vasinsky
Цитата
Надо пройтись foreach'кой и собрать этот список в html > list (ul,li).


Цитата
с решениями, которые далеки даже от малой истины X)


вася - да ты клоун)))\\

Цитата
класть каждый элемент в массив и пробегать по нему циклом сверяя родителя.


собирай ассоциативный массив, все дубли пропадут.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Kusss
Array
(
[one] => Array
(
[two] => Array
(
[0] => 1
[1] => 2
[three] => Array
(
[0] =>
[1] => some1
[2] => some2
)

[2] => four
[four] => Array
(
[0] => 1
)

)

)

)

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

вопрос по теме.
//как из 
$array = array(1, 2, 3, 4);
//сделать
$array[1][2][3][4] = 4;
volter9
Kusss
Типа так:
$a = [1, 2, 3, 4];
$b = [];

$cursor = &$b;

while (!empty($a)) {
$key = array_shift($a);

$cursor[$key] = [];
$cursor = &$cursor[$key];
}

$cursor = $key;
unset($cursor);

var_dump($b);


_____________
Мой блог
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.