json — создание динамического меню навигации в php (индексация)

Для моей динамической навигации мне нужна помощь, так как я все еще новичок в PHP.
Используя эти функции, этот файл передает значения массива в файл json и js.
Правильная индексация особенно важна для функции.

$_js_remc->remote_copy($renaming_js_file, $renaming_js_file_to);
$_json_remc->remote_copy($renaming_jsonfile, $renaming_jsonfile_to);

if ($_js_remc->remote_is_writeable($renaming_js_file) && $_json_remc->remote_is_writeable($renaming_jsonfile)) {
$i = 10000;
$menu_string = "document.getElementById('categories_menu').innerHTML='";
for ($z = 0; $z < count($_POST['menu_lvl1_text']); $z++) {

$i = $i + 100;
$menu_string .= '<li><a href="' . $_POST['menu_lvl1_link'][$z] . '">' . htmlentities($_POST['menu_lvl1_text'][$z], ENT_QUOTES, "UTF-8") . '</a>';
$linkname_lvl1 = ($_POST['menu_lvl1_text'][$z]);
$url_lvl1 = ($_POST['menu_lvl1_link'][$z]);
$menu_list[$i] = array($linkname_lvl1 => $url_lvl1);

if (isset($_POST['menu' . $z . '_lvl2_text']) && !empty($_POST['menu' . $z . '_lvl2_text'])) {
$i = $i +1;
$menu_string .= '<ul>';
for ($zs = 0; $zs < count($_POST['menu' . $z . '_lvl2_text']); $zs++) {
$menu_string .= '<li><a href="' . $_POST['menu' . $z . '_lvl2_link'][$zs] . '">' . htmlentities($_POST['menu' . $z . '_lvl2_text'][$zs], ENT_QUOTES, "UTF-8") . '</a>';
$linkname_lvl2 = ($_POST['menu' . $z . '_lvl2_text'][$zs]);
$url_lvl2 = ($_POST['menu' . $z . '_lvl2_link'][$zs]);
$menu_list[$i] = array($linkname_lvl2 => $url_lvl2);
$i = $i + 1;
}
$menu_string .= '</ul>';

}
$menu_string .= '</li>';
}
$menu_string .= "';";

Как видно из кода, файл json логически записывает следующие значения.

 {
"10100": {
"Lvl_1_1": "Level_1_1"},
"10101": {
"Lvl1_2": "Lvl1_2"},
"10102": {
"Lvl1_3": "Lvl1_3"},
"10203": {
"Lvl_2_1": "Lvl_2_1"},
"10204": {
"Lvl2_2": "Lvl2_2"}
}

Проблема:
Подуровень (например, «10102»), конечно, должен увеличиваться, но только в пределах его категории, после чего возобновляется индекс для оболочки следующей категории, например, «10200». Каждая категория имеет разное количество подссылок.

Вывод будет выглядеть так:

   <li id="u_1_0">
<a href="#"><span id="i_1_0"></span></a>
<ul class="sub">
<li id="u_1_2"><a href="#"><span id="i_1_2"></span></a></li>
<li id="u_1_3"><a href="#"><span id="i_1_3"></span></a></li>

Кто-нибудь знает совет?

1

Решение

Если вы боретесь только со сбросом счетчика $iВы можете просто сбросить счетчик после внутреннего цикла for:

if ($_js_remc->remote_is_writeable($renaming_js_file) && $_json_remc->remote_is_writeable($renaming_jsonfile)) {
$i = 10000;
$menu_string = "document.getElementById('categories_menu').innerHTML='";
for ($z = 0; $z < count($_POST['menu_lvl1_text']); $z++) {

$i = $i + 100;
$menu_string .= '<li><a href="' . $_POST['menu_lvl1_link'][$z] . '">' . htmlentities($_POST['menu_lvl1_text'][$z], ENT_QUOTES, "UTF-8") . '</a>';
$linkname_lvl1 = ($_POST['menu_lvl1_text'][$z]);
$url_lvl1 = ($_POST['menu_lvl1_link'][$z]);
$menu_list[$i] = array($linkname_lvl1 => $url_lvl1);

if (isset($_POST['menu' . $z . '_lvl2_text']) && !empty($_POST['menu' . $z . '_lvl2_text'])) {
$oldCounter = $i;
$menu_string .= '<ul>';
for ($zs = 0; $zs < count($_POST['menu' . $z . '_lvl2_text']); $zs++) {
$i = $i + 1;
[...use $i as before...]
}
$i = $oldCounter;
$menu_string .= '</ul>';
}
$menu_string .= '</li>';
}
$menu_string .= "';";

Обратите внимание, что ваши идентификаторы не являются уникальными. Если есть 100 ссылок, у вас проблемы!

Однако я не понимаю ваш второй блок кода и как он связан с вашим вопросом.

0

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector