Прежде всего, я уверен, что раньше это так или иначе спрашивали, но я не уверен, как правильно это произнести, так что потерпите меня на минутку.
У меня есть массив Category для моегоСкрипт магазина со всеми категориями моих товаров, отсортированными по веткам под названием $categoryTree
.Он устанавливает связь категорий с их тегом c.parentcatid
.Он построен с использованием следующей функции:
public function buildStoreCategoryTree(array $elements, $parentId = 0) {
$branch = array();
foreach ($elements as $element) {
if ($element['c.parentcatid'] == $parentId) {
$children = $this->buildStoreCategoryTree($elements, $element['c.id']);
if ($children) {
$element['children'] = $children;
}
$branch[] = $element;
}
}
return $branch;
}
Вот схема структуры базы данных, в которой все данные хранятся для информации о категориях (все это передается в вышеуказанную функцию):
И, наконец, вот информация ПОСЛЕ того, как она была отсортирована с помощью вышеуказанной функции в ДЕРЕВО:
Array (
[0] => Array (
[0] => 1 [c.id] => 1
[1] => Radios [c.name] => Radios
[2] => radios [c.path] => radios
[3] => 0 [c.parentcatid] => 0
[children] => Array (
[0] => Array (
[0] => 2 [c.id] => 2
[1] => Motorola Radios [c.name] => Motorola Radios
[2] => motorola [c.path] => motorola
[3] => 1 [c.parentcatid] => 1
[children] => Array (
[0] => Array (
[0] => 3 [c.id] => 3
[1] => Motorola Handheld Radios [c.name] => Motorola Handheld Radios
[2] => handheld [c.path] => handheld
[3] => 2 [c.parentcatid] => 2
)
[1] => Array (
[0] => 4 [c.id] => 4
[1] => Motorola Mobile Radios [c.name] => Motorola Mobile Radios
[2] => mobile [c.path] => mobile
[3] => 2 [c.parentcatid] => 2
)
)
)
[1] => Array (
[0] => 5 [c.id] => 5
[1] => Icom Radios [c.name] => Icom Radios
[2] => icom [c.path] => icom
[3] => 1 [c.parentcatid] => 1
[children] => Array (
[0] => Array (
[0] => 6 [c.id] => 6
[1] => Icom Handheld Radios [c.name] => Icom Handheld Radios
[2] => handheld [c.path] => handheld
[3] => 5 [c.parentcatid] => 5
)
[1] => Array (
[0] => 7 [c.id] => 7
[1] => Icom Mobile Radios [c.name] => Icom Mobile Radios
[2] => mobile [c.path] => mobile
[3] => 5 [c.parentcatid] => 5
)
)
)
[2] => Array (
[0] => 8 [c.id] => 8
[1] => Mics & Speakers [c.name] => Mics & Speakers
[2] => mics-and-speakers [c.path] => mics-and-speakers
[3] => 1 [c.parentcatid] => 1
)
[3] => Array (
[0] => 9 [c.id] => 9
[1] => Mounting Hardware [c.name] => Mounting Hardware
[2] => mounts [c.path] => mounts
[3] => 1 [c.parentcatid] => 1
)
[4] => Array (
[0] => 10 [c.id] => 10
[1] => Clips & Assorted [c.name] => Clips & Assorted
[2] => other [c.path] => other
[3] => 1 [c.parentcatid] => 1
)
)
)
[1] => Array (
[0] => 11 [c.id] => 11
[1] => Miscellaneous [c.name] => Miscellaneous
[2] => misc [c.path] => misc
[3] => 0 [c.parentcatid] => 0
[children] => Array (
[0] => Array (
[0] => 12 [c.id] => 12
[1] => LED Lightbars & Products [c.name] => LED Lightbars & Products
[2] => led [c.path] => led
[3] => 11 [c.parentcatid] => 11
)
)
)
)
ТеперьЕсли у меня есть предмет из категории 4
, он считается Handheld radio, потомком Motorola и Radio .На предмете я храню этот идентификатор as catid = '4'
.Теперь мне нужно найти способ получить всю информацию сверху ветви 4 к первому результату (радио -> моторола -> портативное устройство -> пункт здесь).Я бы предпочел перечислять их по порядку, начиная сверху вниз, чтобы я мог пройти по циклу и построить путь к элементу /store/radios/motorola/handheld/item.html
, используя только идентификатор дочернего элемента в качестве начального ключа.
Возможно ли это с помощью этого макета?Заранее спасибо