Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: foreach ja glob

Sivun loppuun

peg [25.01.2008 20:42:25]

#

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.

?>

TsaTsaTsaa [25.01.2008 20:45:35]

#

Määrittelet sen ennen foreach-silmukkaa vaikkapa tyhjäksi merkkijonoksi eli $a = "";

tsuriga [25.01.2008 21:02:59]

#

Käytä taulukkoa. Käyttäisit selkeämpiä muuttujanimiä, eihän noista ota vaikkapa baarikerran jälkeen enää mitään tolkkua.

peg [25.01.2008 21:13:55]

#

Tulostaa edelleen vain viimeisen kansion.?

TsaTsaTsaa [25.01.2008 22:42:23]

#

Niin joo mä käsitin väärin. Käytä taulukkoa niinkuin tsuriga sanoi.

kayttaja-2791 [26.01.2008 19:47:43]

#

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

?>

LaNu [26.01.2008 23:17:33]

#

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.

peg [27.01.2008 01:03:41]

#

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...

tsuriga [27.01.2008 02:15:03]

#

Pitihän se benchmarkkailla ja piste on tässä tosiaan parempi, tulee näemmä joskus varottua merkkijono-operaatioita aivan turhaan.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta