2011-02-09 3 views
0

Я пытаюсь выяснить корневой уровень category_id категории на основе его родительского_ид.Проблемы с поиском корневой категории на основе идентификатора категории

В функции ниже $ this-> cat_arr - это массив всех категорий и их parent_id.

Если parent_id установлен в 0, он считается корневым узлом. Я хочу пройти через массив до тех пор, пока не найду parent_id прошедшего $ cat_id.

function getRoot($cat_id) { 
    foreach ($this->cat_arr as $row) { 
     if ($row->cat_id == $cat_id && $row->parent_id == 0) { 
      return $row->cat_id; 
      break; 
     } else { 
      $this->getRoot($row->parent_id); 
     } 
    } 
} 

В моем приложении я только вызвать эту функцию, когда я знаю $ cat_id не на корневом уровне (поскольку parent_id больше 0), но когда я пытаюсь запустить это она застревает в бесконечная петля.

Является ли моя логика ошибочной, или я пропустил что-то простое?

+0

Просто быстро мысль, но ваше выражение: == 0, возможно, потребуется набор одинарные кавычки «0» потому что это может быть чтение, что, как FALSE, в отличие от нуля (я мог бы быть абсолютно неправильным, но просто подумал, что я сделаю предложение) – OldWest

+0

@OldWest: вы совершенно неправы ;-) – zerkms

+0

Вы бесконечно зацикливаетесь, потому что каждый раз, когда вы рекурсируете, вы начинаете foreach в начале снова. –

ответ

0

Попробуйте это:

function getRoot($cat_id) { 
    foreach ($this->cat_arr as $row) { 
     if ($row->cat_id == $cat_id && $row->parent_id == 0) { 
      return $row->cat_id; 
     } 
    } 
    return $this->getRoot($row->parent_id); 
} 
+0

Ваше предложение приближает меня. Теперь я обнаружил, что все категории с родительским кодом из 0 возвращают один и тот же корень. Я пытаюсь понять, почему, и, возможно, однажды я пойму причину, по которой оно представится. –

+0

Я собираюсь идти вперед и отмечать ваше предложение как ответ, поскольку он затрагивает главную проблему моего вопроса, разбивая бесконечный цикл. Я все еще вижу логическую проблему с функцией в целом, поэтому для тех, кто может ее прочитать позже, это НЕ правильный способ определить корневую категорию на основе параметров, которые я предоставил в этом вопросе. –

Смежные вопросы