Отображение массива списка смежности с помощью переполнения стека

У меня есть следующий массив, который должен отображаться как навигация

[items] => Array
(
[Electronics] => Array
(
[level2] => Array
(
[Home Use] => Array
(
[level3] => Array
(
[Laptops] => Array
(
[level4] => Array
(
[0] => HP A very simple laptop
[1] => HP Tablet
[2] => Acer Laptop
)

)

[Desktops] => Array
(
[level4] => Array
(
[0] => Acer Tablet
)

)

[Tablets] => Array
(
[level4] => Array
(
[0] =>
)

)

)

)

[Business] => Array
(
[level3] => Array
(
[Tablets] => Array
(
[level4] => Array
(
[0] => HP A very simple laptop
[1] => HP Tablet
[2] => Touchmate
)

)

[Laptops] => Array
(
[level4] => Array
(
[0] => Compaq
[1] => IBM
)

)

[Desktop] => Array
(
[level4] => Array
(
[0] => Lenovo
)

)

)

)

)

)

[Hotels] => Array
(
[level2] => Array
(
[5 Stars] => Array
(
[level3] => Array
(
[Daily Basis] => Array
(
[level4] => Array
(
[0] => Hilton
)

)

[Montly Basis] => Array
(
[level4] => Array
(
[0] => Hilton
[1] => Intercon
[2] => Marina Hotel
[3] => Galaxy Plaza Hotel
)

)

)

)

[4 Stars] => Array
(
[level3] => Array
(
[Daily Basis] => Array
(
[level4] => Array
(
[0] => Address
)

)

[Montly Basis] => Array
(
[level4] => Array
(
[0] => Armada Al Barsha Hotel
[1] => Everest International Hotel
[2] => New Hotel
[3] => Good Hotel
)

)

)

)

[3 Stars] => Array
(
[level3] => Array
(
[Daily Basis] => Array
(
[level4] => Array
(
[0] => Royal Garden Hotel
)

)

[Montly Basis] => Array
(
[level4] => Array
(
[0] => Galaxy Plaza Hotel
)

)

)

)

)

)

[Entertainment] => Array
(
[level2] => Array
(
[] => Array
(
[level3] => Array
(
[] => Array
(
[level4] => Array
(
[0] =>
)

)

)

)

)

)

[Services] => Array
(
[level2] => Array
(
[] => Array
(
[level3] => Array
(
[] => Array
(
[level4] => Array
(
[0] =>
)

)

)

)

)

)

)

)

СЕЙЧАС … я хочу отобразить это в неупорядоченном списке. У меня есть следующая функция.

public function display($sorted_array)
{$markup = '';

foreach ($sorted_array as $key => $value)
{

if($key === 'Electronics' || $key ==='Hotels' || $key === 'Services' || $key === 'Entertainment')
{
$markup .= '<h1><li>';
}

$markup .= (is_array($value)) ? '<b>'.$key.'</b></li></ul></h1>'.$this->display($value) : '<ul><li>'.$value. '</li></ul>';

}

return '<ul>'.$markup . '</ul>';

}

Electronics

Home Use

Laptops

HP A very simple laptop
HP Tablet
Acer Laptop

Настольные компьютеры

    Acer Tablet

таблетки

Бизнес

Tablets

HP A very simple laptop
HP Tablet
Touchmate

Ноутбуки

    Compaq
IBM

рабочий стол

    Lenovo

Отели

5 Stars

Daily Basis

Hilton

Все категории и подкатегории отображаются в правильном порядке. Однако мне нужно знать, где я должен добавить идентификатор, чтобы я мог добавлять стили в подкатегории и размещать их соответствующим образом.

-3

Решение

Если вы используете идентификатор, то вы будете использовать идентификатор несколько раз, поэтому используйте класс вместо идентификатора. Одним из способов является сохранение счетчика, который представляет уровень. Если ваша функция работает правильно, вы получите что-то вроде этого:

public function strip($string)
{
$string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens.
$string = preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars.
$string = strtolower($string); //To lower case
return $string;
}

public function display($sorted_array, $level=0)
{
$level++;

$markup = '';

foreach ($sorted_array as $key => $value)
{

if($key === 'Electronics' || $key ==='Hotels' || $key === 'Services' || $key === 'Entertainment')
{
$markup .= '<h1><li id="'.$this->strip($key).'" class="level-'.$level.'">';
}

$markup .= (is_array($value)) ? '<b>'.$key.'</b></li></ul></h1>'.$this->display($value,$level) : '<ul><li id="'.$this->strip($key).'" class="level-'.$level.'">'.$value. '</li></ul>';

}

return '<ul>'.$markup . '</ul>';
}

Теперь вы можете использовать классы уровней в вашем CSS.

.level-1 {

}
.level-2 {

}
...
0

Другие решения

Других решений пока нет …