Miten saan $a tiedot pysymään tuonne loppuun.
<?php $name = $_SERVER['REQUEST_URI']; $polku = dirname("$name"); $tied = basename("$name"); foreach(glob('*', GLOB_ONLYDIR) as $dir) { $kansio = basename($dir); $a = strtoupper("<a href=\"$dir\">$kansio</a><br>"); echo $a.'<br>'; // tässä $a palauttaa kaikki kansiot OK. } ?> <dir> <?php foreach(glob('../*', GLOB_ONLYDIR) as $dir1) { $c1 = strtoupper($current_dir); $b1 = basename($dir1); $a1 = strtoupper("<a href=\"$dir1\">$b1</a><br />"); $a1 = ereg_replace("<A HREF=\"../$c1\">$c1", " <dir>$c1<dir>$a</dir></dir>", $a1); echo $a1; } echo ('<hr>'); echo $c1.'<br>'; echo $a.'<br>'; // Tässä $a palauttaa vain viimeisen kansion. ?>
Määrittelet sen ennen foreach-silmukkaa vaikkapa tyhjäksi merkkijonoksi eli $a = "";
Käytä taulukkoa. Käyttäisit selkeämpiä muuttujanimiä, eihän noista ota vaikkapa baarikerran jälkeen enää mitään tolkkua.
Tulostaa edelleen vain viimeisen kansion.?
Niin joo mä käsitin väärin. Käytä taulukkoa niinkuin tsuriga sanoi.
Ongelmahan on nimenomaan siinä että a sisältää kerrallaan vain yhden kansion arvon, joka ylikirjoitetaan foreach-loopin käydessä lävitse uusia arvoja (toistorakenne kun on). Eli muokkaa se vaikka näin:
<?php $name = $_SERVER['REQUEST_URI']; $polku = dirname("$name"); $tied = basename("$name"); $a = Array(); foreach(glob('*', GLOB_ONLYDIR) as $dir) { $kansio = basename($dir); //lisätään alkio taulukkoon $a[] = strtoupper("<a href=\"$dir\">$kansio</a><br>"); } ?> <dir> <?php foreach(glob('../*', GLOB_ONLYDIR) as $dir1) { $c1 = strtoupper($current_dir); $b1 = basename($dir1); $a1 = strtoupper("<a href=\"$dir1\">$b1</a><br />"); $a1 = ereg_replace("<A HREF=\"../$c1\">$c1", " <dir>$c1<dir>$a</dir></dir>", $a1); echo $a1; } echo ('<hr>'); echo $c1.'<br>'; print_r($a); //Tulostaa a:n rakenteen ja sisällön, debugia siis ?>
tsuriga kirjoitti:
Käytä taulukkoa. Käyttäisit selkeämpiä muuttujanimiä, eihän noista ota vaikkapa baarikerran jälkeen enää mitään tolkkua.
Tuossahan ollaan generoimassa html:ä, joten kätevämpihän se on stringiksi ottaa.
$a .= strtoupper("<a href=\"$dir\">$kansio</a><br>");
Tuo piste tuossa tekee sen, että merkkijono lisätään muuttujan aiemman sisällön jatkoksi.
Tää LaNun ratkaisu on melkein mitä pitääkin, mutta tuon . lisäyksen jälkeen
$a tulostaa viimeisen kansion kahteen kertaan, ensimmäiseksi ja viimeiseksi.
$dir sisältää kuitenkin kansiot oikein, mistä tuo toisto tulee?
EDIT: nyt tajusin mistä se tulee, täyttyy katsoa jos osaan poistaa sen.
EDIT: parempi ku junan vessa...
Pitihän se benchmarkkailla ja piste on tässä tosiaan parempi, tulee näemmä joskus varottua merkkijono-operaatioita aivan turhaan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.