zanzaz
Guest
Нужно правильно рассортировать значения в массиве
В общем, идея такова.
Создаю каталог с неограниченными вложениями каталогов.
БД стандартная:
id | gid | name
id - номер порядковый
gid - если 0 - это корневик, если нет - под-каталог какого-либо каталога (указывается id каталога)
name -
понятно что
В общем, столкулся с проблемой, что нужно создать пути от каждого конечного каталого до корневика.
Например:
Путь "каталог 2" есть:
Главный каталог - > каталог 1 -> каталог 15 -> каталог 35 - > каталог 11 -> каталог 2
или
Путь "каталог 85" есть:
Главный каталог - > каталог 29 -> каталог 54 -> каталог 22 - > каталог 19 -> каталог 15 -> каталог 13 -> каталог 85
.. в таком тоне..
Я пытался осуществить это с помощью массивов.. но не смог реализовать полностью..
т.е. брал конечный id каталога и проверял, его на наличие в поле gid
У меня не было опыта именно с этим. Боюсь сделать так, чтобы это оказалось накладным для рабочей машинки, т.к. посещаемость ресурса в среднем от 10.000 ...
Пожалуйста, очень прошу, кто сталкивался с такой проблемой или кто знает, как можно реализовать, откликнитесь..
Заранее, Спасибо
В общем, идея такова.
Создаю каталог с неограниченными вложениями каталогов.
БД стандартная:
id | gid | name
id - номер порядковый
gid - если 0 - это корневик, если нет - под-каталог какого-либо каталога (указывается id каталога)
name -

В общем, столкулся с проблемой, что нужно создать пути от каждого конечного каталого до корневика.
Например:
Путь "каталог 2" есть:
Главный каталог - > каталог 1 -> каталог 15 -> каталог 35 - > каталог 11 -> каталог 2
или
Путь "каталог 85" есть:
Главный каталог - > каталог 29 -> каталог 54 -> каталог 22 - > каталог 19 -> каталог 15 -> каталог 13 -> каталог 85
.. в таком тоне..
Я пытался осуществить это с помощью массивов.. но не смог реализовать полностью..
т.е. брал конечный id каталога и проверял, его на наличие в поле gid
PHP:
$sql = "SELECT id, gid, name FROM catalog";
$result = $db->query($sql);
$tree = array();
while($myrow = $db->fetch_array($result)){
$cid = $myrow[cid];
$gid = $myrow[gid];
$name = $myrow[name];
.......
$tree[$cid][gid] = $gid;
}
$buf = $tree;
$tree2 = array();
foreach ($tree as $cid=>$key){
if ($key[gid]!=0){
// получаем родитескую категорию
$gid2 = getGidForCid($key[gid],$buf );
// запиминаем ее
$tree2[$cid][gid][] = $gid2;
///.... и тут я дальше пасс..
// не знаю как дальше проверить следующие родительские категории $gid2 с учетом того, чтобы не запускать цикл (каталогов больше 100) и на каждый каталог цикл запускать.. мне кажется это накладно.. ((
}
}
Пожалуйста, очень прошу, кто сталкивался с такой проблемой или кто знает, как можно реализовать, откликнитесь..
Заранее, Спасибо