увеличить $ x через несколько циклов вложенности

1

Чтобы перечислить все категории на моем веб-сайте, я перебираю иерархию категорий со следующей функцией:

$x = 1;
function list_categories($categories, $x) {
    foreach($categories as $category) {
        $cat_list .= '<li>'.$category['name'].'<li>';
        if (count($category['children']) > 0) {
            $cat_list .= '<ul>'
            list_categories($category['children'], $x);
            $cat_list .= '</ul>'
        }
        $x++; // incremention of $x
    }
}

Проблема в том, что $x увеличивается в следующем порядке:

// ITERATION #1
parent: $x = 1
|   // nesting loop #1
|--> child $x = 2
    |   // sub-nesting loop #1
    |--> descendant $x = 3

// ITERATION #2
parent: $x = 2
|   // nesting loop #2
|--> child $x = 3
    |   // sub-nesting loop #2
    |--> descendant $x = 4

// ITERATION #3
parent: $x = 3
|   // nesting loop #3
|--> child $x = 4
    |   // sub-nesting loop #3
    |--> descendant $x = 5

Как я могу сделать $x для увеличения в прямой последовательности (например, 1,2,3,4,5,6,7,8,9,10) по всем петлям, как родительским, так и гнездовым?

Теги:
nested-loops
loops
foreach

2 ответа

2
Лучший ответ

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

function list_categories($categories, &$x) {
  • 0
    Я только что попробовал, но я получаю сообщение об ошибке: call-time pass-by-reference has been removed
  • 0
    Я не думаю, что вы должны получить это от моей перемены. См. Stackoverflow.com/questions/8971261/…
Показать ещё 3 комментария
0

Передайте $ x через ваш вызов функции.

list_categories($category['children']); должен передаваться в качестве параметра $ x.

  • 0
    Извините, я забыл написать это в своем вопросе. Я делаю это уже в моем приложении. Я отредактировал код в своем посте.
  • 0
    Если он этого не сделает, он получит ошибку из-за неправильного количества аргументов.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню