Toon posts:

[PHP]Tree / array..

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil nu een tree uitlezen en dat zetten in een array, laten we zeggen dat het een 2000 mp3's zijn, is dit handig om in een soortement array te zetten?... of kan ik dat beter niet doen? :D

dus
code:
1
2
3
4
5
6
7
8
9
array[1] = "\";
array[2] = "\mp3\";
array[2]['file'][1] = "file1.mp3";
array[2]['file'][2] = "file1.mp3";
array[2]['file'][3] = "file1.mp3";
array[3] = '\mp3\bla\";
array[3]['file'][1] = "file1.mp3";
array[3]['file'][2] = "file1.mp3";
array[3]['file'][3] = "file1.mp3";

etc etc of kan ik dit beter anders aanpakken?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Dat hangt er allemaal vanaf wat je er mee wilt doen...

Als je het alleen wilt afdrukken? Niet in een array stoppen, maar direct afdrukken.
Als je er van alles mee wilt doen? Sja, een array is dan niet onhandig.

Verwijderd

Als je echt nog de boom structuur wilt behouden kan je het ook zo doen dat je er de level (diepte van de boom ) in opslaat.
code:
1
2
3
4
5
6
7
8
9
10
  item[0] = 0;
  item[1] = "/";
  item[2] = 1;
  item[3] = "/mp3";
  item[4] = 2;
  item[5] = "/mp3/nummer1";
  item[6] = 2;
  item[7] = "/mp3/nummer2";
  item[8] = 2;
  item[9] = "/mp3/nummer2";

dan heb je nog steeds een boom maar wel linear in een array.
en de structuur is nog steeds duidelijk. Er zijn situaties waar dat erg handig kan zijn, kost wel wat meer geheugen.

  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 02-06 23:18
ik zou het zo doen...
code:
1
2
3
4
5
6
$file[0][0] = "liedje.mp3";
$file[1][0] = "bla.mp3";
$file[1][1] = "pietje.mp3";
$file[1][2] = "jantje.mp3";
$file[2][0] = "tralalala.mp3";
$file[2][1] = "tweak.mp3";

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt


Verwijderd

Topicstarter
Jah, en ik wil het dan ook bouwen in een javascript boom, lijkt me lache man :)

  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 02-06 23:18
Op zondag 14 april 2002 15:48 schreef xtentic het volgende:
Jah, en ik wil het dan ook bouwen in een javascript boom, lijkt me lache man :)
is dit een serieuze opmerking voor het vervolg van je topic :?

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt


  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Kan je niet zoiets doen:

Tree
code:
1
2
3
4
5
6
Albums
  Prodigy
    Bla.mp3
    Bla2.mp3
  Rage Against The Machine
    Woei.mp3

en dan dit:
PHP:
1
<?  $artiest=array();  $artiest[1]["naam"]="Albums";  $artiest[1]["pid"]=0;  $artiest[2]["naam"]="Prodigy";  $artiest[2]["pid"]=1;  $artiest[3]["naam"]="Bla.mp3";  $artiest[3]["pid"]=2;  $artiest[4]["naam"]="Bla2.mp3";  $artiest[4]["pid"]=2;?>

Enzovoorts.

Verwijderd

Topicstarter
Op zondag 14 april 2002 15:52 schreef SWINX het volgende:

[..]

is dit een serieuze opmerking voor het vervolg van je topic :?
nee niet echt ;)... ik ben even wat aan het testen en ga dan eens een javascriptje in elkaar zetten die tree'z kan pulldownen enzo :D...teminste proberen ;)

Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
array(4) {
  [1]=>
  array(6) {
    [1]=>
    array(1) {
    [1]=>
    string(5) "Style"
    }
    [5]=>
    array(1) {
    [20]=>
    string(3) "new"
    }
    [15]=>
    array(1) {
    [21]=>
    string(6) "Albums"
    }
    [51]=>
    array(1) {
    [21]=>
    string(7) "artists"
    }
    [315]=>
    array(1) {
    [2]=>
    string(6) "Upload"
    }
    [316]=>
    array(1) {
    [1]=>
    string(5) "Years"
    }
  }
  [2]=>
  array(306) {
    [2]=>
    array(1) {
    [1]=>
    string(12) "Hiphop - R&B"
    }
    [3]=>
    array(394) {
    [1]=>
    array(2) {
      ["name"]=>
      string(27) "Zig & Zag - Them Girls .mp3"
      ["size"]=>
      string(7) "4.28 Mb"
    }
    [2]=>
    array(2) {
      ["name"]=>
      string(29) "All Saints - Black Coffee.mp3"
      ["size"]=>
      string(7) "6.53 Mb"
    }
    [3]=>
    array(2) {
      ["name"]=>
      string(30) "Arnhemsgewijs - Ik mis jou.mp3"
      ["size"]=>
      string(7) "4.48 Mb"
    }
    [4]=>etc etc etc etc etc etc etc etc

Dit heb ik nu >:)

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 14:17
Je kan na het array gebruik in PHP het beste output maken met XML (is hiervoor heel goed geschikt)

Verwijderd

Topicstarter
Op zondag 14 april 2002 16:11 schreef ddc het volgende:
Je kan na het array gebruik in PHP het beste output maken met XML (is hiervoor heel goed geschikt)
Ik heb zelf nog de balle verstand van XML, kan je me wat voorzetjes geven?

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025

SchizoDuckie

Kwaak

Gelijk je array opbouwen terwijl je de dir uitleest lijkt me een sneller idee :)
PHP:
1
<?function createTabs($howmuch){    $i = 0;    while ($i < $howmuch) { $output .= "\t"; $i++; }    return($output);}function newdir($file)    {            global $level;            $tmphandle = opendir($file);            chdir($file);            $level++;        while ($file = readdir($tmphandle))         {            file_or_dir($file);        }        chdir("..");        $level--;        closedir($tmphandle);    }        function file_or_dir($file)    {       global $level, $sitedir;        if ($file != "." &amp;&amp; $file != ".." &amp;&amp; is_dir($file))        {             $tabs = createTabs($level);            echo ($tabs.$file."\n");            newdir($file);          }    if ($file != "." &amp;&amp; $file != ".." &amp;&amp; is_file($file))        {            $tabs = createTabs($level);            echo ($tabs.'->'.$file."\n");                        }    }         newdir("/wwwroot/");?>

geeft:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
De NVLF
        De regios
            ->Regioadressen.htm
        De secties
            NVLF-Gezondheidszorg
                ->Bestuursleden NVLF-G.htm
                ->publicaties.nvlf
                ->statuten nvlf-g.nvlf
            NVLF-Onderwijs
                ->Studiedag NVLF-O 24-04-2002.doc
                ->Studiedag NVLF-O 24-04-2002.htm
                ->bestuursleden nvlf-o.htm
                ->index.nvlf
                ->nieuws vanuit de cmhf.htm
                ->publicaties.htm
                ->statuten nvlf-o.htm
            NVLF-Vrijgevestigden
                ->bestuursleden nvlf-v.htm
                ->publicaties.nvlf
        De vereniging
            Het Hoofdbestuur
                ->Hoofdbestuursleden.nvlf
                ->Visie 2000-2005.nvlf

ongeveer :)

dat kan je dan makkelijk ombouwen naar een array :)

Stop uploading passwords to Github!


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 14:17
Op zondag 14 april 2002 16:12 schreef xtentic het volgende:
Ik heb zelf nog de balle verstand van XML, kan je me wat voorzetjes geven?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<mp3>
  <dir path="\mp3\">
    <file name="file1.mp3" />
    <file name="file2.mp3" />
    <file name="file3.mp3" />
    <file name="file4.mp3" />
    <file name="file5.mp3" />
  </dir>
  <dir path="\mp3\house\">
    <file name="file1.mp3" />
    <file name="file2.mp3" />
    <file name="file3.mp3" />
    <file name="file4.mp3" />
    <file name="file5.mp3" />
  </dir>
</mp3>

Verwijderd

Topicstarter
Ik heb nu het volgende

http://members.lycos.nl/phpfreak/mp3list/

:)... voorbeeld staat er bij, maar nu wil ik het nog verwerken in een javascript pulldown tree ;{ best irrie is dat! :)

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 14:17
Toch jammer dat je geen XML hebt gebruikt :{

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 09-09 11:02
Naar mijn onbescheiden mening is er maar EEN correcte manier om zo'n boom op te slaan in een array. De keys van de elementen zijn de bestandsnamen; als de waarde een array is betreft het een directory en anders een bestand. Wat je dan in de waarde hebt staan is niet zo relevant (misschien een array met keys als size, owner, etc.).

In PHP dus zoiets:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  array (
    "dev" =>
    array ( 
      "null" => ...,
      "random" => ...
    )
    "root" =>
    array (
    )
    "usr" =>
    (
     array (
         "local" => ..
(etc)

Het gebruik van integer-indices is mijns inziens erg lelijk, omdat die indices geen betekenis hebben. Waarom zou je ze dan op willen slaan?

Een bestandssysteem is normaalgesproken gewoon een boom, waarvan de nodes gelabeld zijn door bestands- en directorynamen. Op deze manier representeer je dat ook precies in je datastructuur.

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 14:17
Op zondag 14 april 2002 19:34 schreef Soultaker het volgende:
Bla
En het geheel wordt ook veel langzamer als je geen getallen gebruikt in de arrays...

Verwijderd

Topicstarter
Op zondag 14 april 2002 19:21 schreef ddc het volgende:
Toch jammer dat je geen XML hebt gebruikt :{
waarom vind je dat jammer, kan ik toch altijd nog implementeren, maar snap het idee er gewoon niet achter ;)

  • Grum
  • Registratie: Juni 2001
  • Niet online
ddc: En het geheel wordt ook veel langzamer als je geen getallen gebruikt in de arrays...


Altijd leuk om te zien dat mensen me benchmarks lezen maar ze in een fout daglicht zetten.

100% slomer op 0.00001 sec is nog steeds te verwaarlozen ;)

en vind je van niet .. dan wil ik je der welles 20 opvolgende zien tellen :+

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 09-09 11:02
Op zondag 14 april 2002 19:40 schreef ddc het volgende:
En het geheel wordt ook veel langzamer als je geen getallen gebruikt in de arrays...
Als je dat soort snelheidsverschillen belangrijker vindt dan het schrijven van fatsoenlijke code, dan kun je net zo goed direct assembly coden. Het gaat erom dat je de juiste representatie kiest voor de juiste data. Daarbij speelt efficientie een rol, maar die is niet groter dan die van de helderheid en bruikbaarheid van de gekozen datastructuur. Als je in PHP programmeert moet je gewoon niet miepen over de efficientie van je implementatie.

Daarbij denk ik dat het gebruik van getallen niet sneller is, als je de structuur op een zinnige manier doorloopt, namelijk zo:
code:
1
foreach($array as $file => $data) doe_iets_met($file);

In plaats van met jou voorstel:
code:
1
foreach($array as $data) doe_iets_met($data["file"]);

Dat kost je mooi een extra look-up!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op zondag 14 april 2002 22:48 schreef Soultaker het volgende:
code:
1
foreach($array as $data) doe_iets_met($data["file"]);

Dat kost je mooi een extra look-up!
* ACM kan het niet laten...

Maar het is wel sneller :+
Ow, en belangrijker. Helemaal niet hetzelfde :)
De eerste kan je beter een array_keys() voor gebruiken ;)
Pagina: 1