Как правильно организовать данные и выводить их?

sharomet

Новичок
Я использую mongodb.
К примеру у меня есть вот такая структура данных:
Код:
{
    "_id" : ObjectId("18b97aa654bce61356002559"),
    "name" : "Category",
    "childs" : [
        {
            "_id" : ObjectId("22b55aa654bce61356002559"),
            "name" : "Sub Category",
            "childs" :[
               {
                   "_id" : ObjectId("33b55aa654bce61356002559"),
                   "name" : "Sub Sub Category",
                   "childs" : "",
                   "products":[
                    {
                         "_id" : ObjectId("44b55aa654bce61356002559"),
                        "name":"sub sub products"
                    }
                   ]
                }
             ]
        }
    ],
}
Для того что бы получить категорию любого уровня я использую рекурсию, но некоторые пишут что подобный метод может уложить весь сайт правда ли это?

PHP:
$category = Categories::find() -> limit(10) -> all();
$data= $this -> getChildById($category, $id)[0]; //передаём массив с категориями и id

public function getChildById($arr, $id) {
      if(is_array($arr)){
        if((string)$arr[0]['_id'] == $id){
          return $arr;
        }else {
          foreach ($arr as $kay => $value) {
            return $this -> getChildById($value['childs'], $id);
          }
        }
      }
      return  false;
    }
Как лучше всего выводить подобные данные. Спасибо.
 

WMix

герр M:)ller
Партнер клуба
если по данным пробежаться один раз и создать массив типа
PHP:
$categories = [ '18b97aa654bce61356002559' => &$линк_на_категорию, '22b55aa654bce61356002559' => ... ]
то можно вытягивать каждую категорию простым $categories[$id];

если в $линк_на_категорию хранился бы обьект
PHP:
class Category{
  public $id,
  public $name;
  /**
   * @var Category[]
   */
  public $children;
}
то даже линковать ("&") не придется
 
Сверху