Autor Zpráva
Alda
Profil *
Ahoj, potřeboval bych poradit s tímto problémem. Pokusím se ho nastínit

Mám třeba v url : /osobni/slozky/vertikal/


a potřebuji vypsat v tomto případě tři řádky jelikož proměnná get obsahuje 3 hodnoty

osobni
osobni/slozky
osobni/slozky/vertikal


zkoušel jsem to pomocí for

for ($i = 1; $i <= count($_GET); $i++) {
echo $_GET['get_'.$i];
}


jenže se mi vypisuje jen
osobní
slozky
vertikal


Neporadil by někdo jak na to?
Tori
Profil
Alda:
echo $_GET['get_'.$i];
To asi překládáte v htaccess, že? Hodilo by se dopsat.
Koukněte se na funkce substr a strpos. Budete v cyklu hledat v url lomítko. Pokud se nenajde, vypíšete celou url a konec cyklu. Pokud se najde, vypíšete vše od začátku až k tomuto lomítku, uložíte si offset (= kolikátý znak odleva bylo to lomítko), a příště začínáte hledat od [uložený offset +1].

edit: Pardon, špatně jsem pochopila to „Mám třeba v url : /osobni/slozky/vertikal/“, takže taky předpokládám na vstupu řetězec místo pole.
Alda
Profil *
Tori:
A neslo by to pomoci treba implode?
o_O
Profil
Alda:
for($i=1;$i<=count($_GET);$i++){ // projedeme pole $_GET
  for($n=1;$n<=$i;$n++) // projedeme všechny předchozí výskyty až do nynějšího
    echo $_GET["get_".$n].($n==$i ? null:"/"); // vypíšeme hodnotu, v případě, že už jsme dorazili na konec, nevypíšeme lomítko
  echo "<br>";
}
Edit: Tak naopak :)
Alda
Profil *
o_O:
Ted to funguje, sice vůbec nechápu princip ale funguje to, akorát opačně, což už vůbec nechápu :-(

Místo
osobni
osobni/slozky
osobni/slozky/vertikal


to vypisuje

osobni
slozky/osobni
vertikal/slozky/osobni
o_O
Profil
Alda:
Princip je jednoduchý. Ve Vašem případě projíždíte GET - od začátku do konce. To já dělám taktéž, ale 2×.

Například když budete u "get_10", znovu se projede pole od začátku (tím dodatečným for-em) a díky toho se získají složky.
Alda
Profil *
o_O:
A kdybych to chtěl vypisovat popořadě, ne opačně?
Tori
Profil
Alternativa s řetězcovými funkcemi:
$url = 'osobni/slozky/vertikal';
$o = 0;
while (($n = strpos($url,'/',$o)) !== false)	{
	echo '<br>'.substr($url, 0, $n);
	$o = $n+1;
}
echo '<br>'.$url;
o_O
Profil
Alda:
V [#4], kdyby jste se díval, jsem již dávno upravil editovat nevyhovující script. A vůbec, není na tom nic složitého k přepsání, pokud jste byl schopen napsat si 1. for().
ng9
Profil
ještě přihodím kratší zápis...

$e=explode("/",trim($_GET,"/"));
	foreach ($e as $v) {
		$r.="$v/";
		echo trim($r,"/");
	}
Alda
Profil *
o_O:
Díval jsem se, ale ten opravený script nemuzu vůbec začlenit do nějaké proměnné :( respektivne ho vypsat tam kde potřebuji

tohle funguje
for($i=1; $i<=count($_GET); $i++){ // projedeme pole $_GET
echo '<p>';
for($n=1; $n<=$i; $n++){ // projedeme všechny předchozí výskyty až do nynějšího
echo $_GET["get_".$n].($n==$i ? null:"/"); // vypíšeme hodnotu, v případě, že už jsme dorazili na konec, nevypíšeme lomítko
}
echo '</p>'."\n";
}


ale tohle už ne

for($i=1; $i<=count($_GET); $i++){ // projedeme pole $_GET
for($n=1; $n<=$i; $n++){ // projedeme všechny předchozí výskyty až do nynějšího
$result = $_GET["get_".$n].($n==$i ? null:"/"); // vypíšeme hodnotu, v případě, že už jsme dorazili na konec, nevypíšeme lomítko
}
echo '<p>'.$result.'</p>'."\n";
}


ani tohle ne

for($i=1; $i<=count($_GET); $i++){ // projedeme pole $_GET
for($n=1; $n<=$i; $n++){ // projedeme všechny předchozí výskyty až do nynějšího
$result .= $_GET["get_".$n].($n==$i ? null:"/"); // vypíšeme hodnotu, v případě, že už jsme dorazili na konec, nevypíšeme lomítko
}
echo '<p>'.$result.'</p>'."\n";
}
ng9
Profil
Zkus to co jsem ti napsal, stačí tam nacpat tu uvedenou url a o víc se nestaráš.
Alda
Profil *
ng9:
Kratší to je, to jo, škoda, že i na výstupu ;-)
ng9
Profil
Nebo jsem něco přehlídl? Jen si tam dopíšeš zalomení řádku a výstup máš jaký požaduješ.

$g="/osobni/slozky/vertikal/";
$e=explode("/",trim($g,"/"));
    foreach ($e as $v) {
        $r.="$v/";
        echo trim($r,"/")."<br>";
    }

/*

osobni
osobni/slozky
osobni/slozky/vertikal

*/
Alda
Profil *
ng9:
Jenže problém je v tom, že $_GET není string ale pole. Pokud to bude string, tak to samozřejmě funguje ale to není v tomto případě můj připad.
ng9
Profil
Alda:

$i=0;
while ($_GET[++$i]) {
	$r.=$_GET[$i]."/";
	echo trim($r,"/")."<br>";
}
Majkl578
Profil
[#4] o_O: Pevná vazba na URL - co když přidám parametr? Tvé řešení selže.

Co třeba takhle, nezávisle na nějakých proměnných v _GET?
// aktuální adresa bez query části
$path = $_SERVER['QUERY_STRING'] === ''
    ? $_SERVER['REQUEST_URI']
    : substr($_SERVER['REQUEST_URI'], 0, -strlen($_SERVER['QUERY_STRING']));

// rozdělení na komponenty
$components = preg_split('~/+~', trim(rtrim($path, '?'), '/'));

// vypsání jednotlivých částí
for ($i = 1, $count = count($components); $i <= $count; $i++) {
    echo implode('/', array_slice($components, 0, $i)), PHP_EOL;
}

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0