NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Stromový systém

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Neaktivní uživatel:23.10.2015 16:14

Zdravím,

potřeboval bych vytvořit stromovou strukturu pro jakýsi file systém. Výsledný vzhled můžete vidět v příloze. Zkoušel jsem to pomocí rekurze, ale zjistil jsem, že na to nemám dostatek zkušeností. :D Se stromovými strukturami jsem ještě nepracoval, tak bych potřeboval nějak nasměrovat.

Předem díky za odpověď. :)

Odpovědět
23.10.2015 16:14
Neaktivní uživatelský účet
Avatar
shaman
Člen
Avatar
Odpovídá na Neaktivní uživatel
shaman:23.10.2015 16:37

Kukni sa na kod nizsie. Ten ti vrati pole so vsetkymi cestami a nazvami suborov. Ako si to nastylujes je na tebe.

<?php

$path = realpath('/cesta/do/adresara');

$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST);
foreach($objects as $name => $object){
    //echo "$name\n";
    var_dump($object);
}

?>
Nahoru Odpovědět
23.10.2015 16:37
try {...} catch (Exception ignored) { echo " ¯\_(ツ)_/¯ "; }
Avatar
Odpovídá na shaman
Neaktivní uživatel:23.10.2015 16:44

Promiň, zapomněl jsem říct, že nejde o fyzické složky, ale o data v databázi. Strukturu můžu klidně upravit, zatím mám ale tabulku se sloupci "folder.title" a "folder.parent_id". V PHP pak potřebuju vypsat do první úrovně složky bez rodiče a pod ně složky, které mají jako rodiče danou složku. Snad mi rozumíš. :)

Editováno 23.10.2015 16:44
Nahoru Odpovědět
23.10.2015 16:44
Neaktivní uživatelský účet
Avatar
d4rkw34v3r
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
d4rkw34v3r:23.10.2015 17:01

Co se týče tý struktury, tak záleží, jakou databázi používáš(myslím, že třeba mysql není moc efektivní, co se týče rekurzivních dotazů), množství dat v tý tabulce, jestli se do tý tabulky budou často přidávat další položky nebo se z ní bude spíše číst a v neposlední řadě, jestli ti záleží na pořadí prvků při výpisu.

Mrkni se na http://www.slideshare.net/…rchical-data

Pak si stačí dohledat nástroje pro práci s těmito typy uložení, nebo si je napsat sám. To už záleží na tobě.

 
Nahoru Odpovědět
23.10.2015 17:01
Avatar
Odpovídá na d4rkw34v3r
Neaktivní uživatel:23.10.2015 17:12

Prošel jsem to a vypadá to, že všechna řešení pro MySQL by byla neefektivní. Zřejmě udělám jen dvě vnoření. Ale moc díky za pomoc. :)

Nahoru Odpovědět
23.10.2015 17:12
Neaktivní uživatelský účet
Avatar
TomasGlawaty
Člen
Avatar
Odpovídá na Neaktivní uživatel
TomasGlawaty:23.10.2015 20:28

Taky jsem tohle dřive řešil.
Když chceš ten 'strom' vykreslit tak s nejprve vytáhni všechna data z databáze a s těmy pak pracuj (s polem)
Nějak takhle by to mohlo vypada (píšu z hlavy):

public function getCategoryTreeRecursive($id_parent = 0)
{
        foreach ($this->category as $row)
        {
                if ($row['id_parent'] === $id_parent)
                {
                        echo '<ul>';
                        echo '<li>';

                        echo '<i class="fa fa-folder"></i>' . $row['name'];

                        $this->getCategoryTreeRecursive($row['id']);

                        echo '</li>';
                        echo '</ul>';
                }
        }
}

Tabulka vypadá takto:

id id_parent name
1 0 folder1
2 0 folder2
3 2 folder3

...

Nejprve si někde zavoláš dotaz do DB a vytáhneš si z ní vše (zde $this->category).
Pak zavoláš tuto metodu, která to projede. Řekl bych, že to je docela i rychlé, protože jde jen jeden dotaz do databáze.
Pokud by jsi nechtěl vykreslovat celý strom, ale jen určitou větev, existuje metoda, které se říká Traverzování kolem stromu, tak můžeš kdyžtak pohledat :)

 
Nahoru Odpovědět
23.10.2015 20:28
Avatar
Odpovídá na TomasGlawaty
Neaktivní uživatel:23.10.2015 20:35

Díky, zítra se na to podívám a možná to implementuju.

Nahoru Odpovědět
23.10.2015 20:35
Neaktivní uživatelský účet
Avatar
TomasGlawaty
Člen
Avatar
Odpovídá na Neaktivní uživatel
TomasGlawaty:27.10.2015 16:47

Tak co, jak to dopadlo ? :)

 
Nahoru Odpovědět
27.10.2015 16:47
Avatar
Odpovídá na TomasGlawaty
Neaktivní uživatel:27.10.2015 16:53

Nechal jsem to jen dvouvrstvý. Možná se k tomu někdy vrátím. :)

Nahoru Odpovědět
27.10.2015 16:53
Neaktivní uživatelský účet
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.