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 |
#2 · Zasláno: 2. 12. 2011, 16:57:07 · Upravil/a: Tori
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 * |
#3 · Zasláno: 2. 12. 2011, 17:02:22
Tori:
A neslo by to pomoci treba implode? |
||
o_O Profil |
#4 · Zasláno: 2. 12. 2011, 17:33:52 · Upravil/a: o_O
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>"; } |
||
Alda Profil * |
#5 · Zasláno: 2. 12. 2011, 17:42:36
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 |
#6 · Zasláno: 2. 12. 2011, 17:46:12 · Upravil/a: o_O
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 * |
#7 · Zasláno: 2. 12. 2011, 17:53:59
o_O:
A kdybych to chtěl vypisovat popořadě, ne opačně? |
||
Tori Profil |
#8 · Zasláno: 2. 12. 2011, 18:06:36
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 |
#9 · Zasláno: 2. 12. 2011, 18:36:24
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 |
#10 · Zasláno: 2. 12. 2011, 19:07:03 · Upravil/a: ng9
ještě přihodím kratší zápis...
$e=explode("/",trim($_GET,"/")); foreach ($e as $v) { $r.="$v/"; echo trim($r,"/"); } |
||
Alda Profil * |
#11 · Zasláno: 2. 12. 2011, 19:12:49
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 |
#12 · Zasláno: 2. 12. 2011, 19:15:01
Zkus to co jsem ti napsal, stačí tam nacpat tu uvedenou url a o víc se nestaráš.
|
||
Alda Profil * |
#13 · Zasláno: 2. 12. 2011, 19:15:26
ng9:
Kratší to je, to jo, škoda, že i na výstupu ;-) |
||
ng9 Profil |
#14 · Zasláno: 2. 12. 2011, 19:20:00
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 * |
#15 · Zasláno: 2. 12. 2011, 19:26:14
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 |
#16 · Zasláno: 2. 12. 2011, 19:31:58
Alda:
$i=0; while ($_GET[++$i]) { $r.=$_GET[$i]."/"; echo trim($r,"/")."<br>"; } |
||
Majkl578 Profil |
#17 · Zasláno: 2. 12. 2011, 21:55:30
[#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; } |
||
Časová prodleva: 12 let
|
0