beclaus
3.09.2015 - 12:38
Привет всем.
Есть [вот так"ой" вот]

список (похожий на директории, но это не они:
/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
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;
_____________
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
3.09.2015 - 13:24
Цитата (Игорь_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
3.09.2015 - 13:46
это не мои проблемы
Цитата |
Чувствую список получится оч длинный |
и это тоже.
_____________
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
3.09.2015 - 13:54
Цитата (Игорь_Vasinsky @ 3.09.2015 - 13:46) |
это не мои проблемы
Цитата | Чувствую список получится оч длинный |
и это тоже.
|
В подобных ситуациях незачем было вступать в дискуссию с решениями, которые далеки даже от малой истины X)
beclaus, результат какой должен быть для приведенных входных данных? По описанию как-то не очень понятно.
Игорь_Vasinsky
3.09.2015 - 15:00
Цитата |
Надо пройтись 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
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
3.09.2015 - 19:59
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);
_____________
Мой блог
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.