У меня есть следующий массив, который должен отображаться как навигация
[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
Все категории и подкатегории отображаются в правильном порядке. Однако мне нужно знать, где я должен добавить идентификатор, чтобы я мог добавлять стили в подкатегории и размещать их соответствующим образом.
Если вы используете идентификатор, то вы будете использовать идентификатор несколько раз, поэтому используйте класс вместо идентификатора. Одним из способов является сохранение счетчика, который представляет уровень. Если ваша функция работает правильно, вы получите что-то вроде этого:
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 {
}
...
Других решений пока нет …