Pobranie wartosci z linku przepisanego do zmiennej
Pobranie wartosci z linku przepisanego do zmiennej
Załóżmy, że mamy taki link: http://www.strona.pl?wartosc=1&nazwa=2
Jeśli taki link jest normalnie wpisany w przeglądarce to żeby pobrać wartość wystarczy użyć $_GET[wartosc] a czy jest podobna możliwość żeby pobrać ja jeśli link jest przypisany załóżmy do zmiennej $link = "http://www.strona.pl?wartosc=1&nazwa=2" ?
Jeśli taki link jest normalnie wpisany w przeglądarce to żeby pobrać wartość wystarczy użyć $_GET[wartosc] a czy jest podobna możliwość żeby pobrać ja jeśli link jest przypisany załóżmy do zmiennej $link = "http://www.strona.pl?wartosc=1&nazwa=2" ?
Re: Pobranie wartosci z linku przepisanego do zmiennej
To może się wdawać odrobinę dzikie ale ma swoje praktyczne strony:
Krok pierwszy:
Teraz w $adres pod $adres[0] masz adres http://www.strona.pl a dalej w $adres[1] masz parametry.
Krok drugi:
Teraz w $parametry, każde element tablicy poczynając od zera ma coś takiego ($parametry[0],$parametry[1] itp...):
wartosc=1
nazwa=2
costam=69
itp...
Krok trzeci:
I w ten sposób tablice $zmienne wygląda kropka w kropkę tak samo jak $_GET.
Alternatywa
Można użyć parse_url() dostępne w PHP by wyciągnąć to co Cie interesuje i przy okazji rozbić Twój adres na czynniki pierwsze.
parse_url() na php.net.pl
Wtedy krok pierwszy będzie wyglądał tak:
To co znajduje się po ? czyli parametry nasze będzie wtedy pod $adres['query']. Znowu $adres['query'] można potraktować parse_str w ten sposób:
Wtedy otrzymasz coś takiego:
$parametry['wartosc'] == 1;
$parametry['nazwa'] == 2;
W skrócie - podejścia są dwa - proponuje to drugie. Chciałem tylko pokazać że się da
No i parse_str ma znacznie większe możliwości. Przykładowo poprzez link możesz przekazać tablicę. O ile parse_str weźmie to od uwagę o tyle mój sposób wyżej już nie. Są też inne przypadki.
Aha... uważaj tylko na kropkę. Jeżeli parsował byś coś w stlu cos.class = 4 to parse_str zamieni to na cos_class = 4. Tak na przyszłość.
Kod: Zaznacz cały
$link = "http://www.strona.pl?wartosc=1&nazwa=2"Kod: Zaznacz cały
$adres = explode('?',$link)Krok drugi:
Kod: Zaznacz cały
$parametry = explode('&',$adres[1]);wartosc=1
nazwa=2
costam=69
itp...
Krok trzeci:
Kod: Zaznacz cały
$limit = count($parametry);
for($i=0;$i<$limit;$i++) {
$temp = explode('=',$parametry[$i];
$zmienne[$temp[0]] = $temp[1];
}Alternatywa
Można użyć parse_url() dostępne w PHP by wyciągnąć to co Cie interesuje i przy okazji rozbić Twój adres na czynniki pierwsze.
parse_url() na php.net.pl
Wtedy krok pierwszy będzie wyglądał tak:
Kod: Zaznacz cały
$adres = parse_url($link);Kod: Zaznacz cały
$parametry = Array();
parse_str($adres,$parametry)$parametry['wartosc'] == 1;
$parametry['nazwa'] == 2;
W skrócie - podejścia są dwa - proponuje to drugie. Chciałem tylko pokazać że się da
Aha... uważaj tylko na kropkę. Jeżeli parsował byś coś w stlu cos.class = 4 to parse_str zamieni to na cos_class = 4. Tak na przyszłość.
Re: Pobranie wartosci z linku przepisanego do zmiennej
dzieki za pomoc, coś z tego się zrobi
Re: Pobranie wartosci z linku przepisanego do zmiennej
Pierwszy wariant strasznie nieoptymalnie, bo ten pierwszy explode() nie ma kompletnie sensu, a trzeci też jakoś naokoło. Tak z głowy proponowałbymgorylek pisze: Krok pierwszy:
Kod: Zaznacz cały
$link = "http://www.strona.pl?wartosc=1&nazwa=2";
$obrobka = substr($link, strpos($link, '?')); //*
$obrobka = explode('&', $obrobka);
$efekt_koncowy = array();
foreach ($obrobka as $kombinacja) {
list($zmienna, $nazwa) = explode('=', $kombinacja);
$efekt_koncowy($zmienna) = $nazwa; //**
}
print_r($efekt_koncowy);
*głowy nie dam, być może do strpos() trzeba dodać lub odjąć 1
**naturalnie, jeśli nie chcemy otrzymać associative array'a, robimy jakieś inne przypisanie do jakichś innych zmiennych
Re: Pobranie wartosci z linku przepisanego do zmiennej
Keph, pomyśl człowieku odrobinę. Jeżeli potrzebne Ci to co jest przed ? to explode jak najbardziej.
Po drugie dalej zrobiłeś praktycznie to samo tylko przy pomocy innej pętli i innych instrukcji. Jeżeli widzisz różnicę to gratuluję. Bo ja przepuściłem oba rozwiązania przez xdebug tak dla pewności i wiesz co ? Sam sprawdź.
Po drugie dalej zrobiłeś praktycznie to samo tylko przy pomocy innej pętli i innych instrukcji. Jeżeli widzisz różnicę to gratuluję. Bo ja przepuściłem oba rozwiązania przez xdebug tak dla pewności i wiesz co ? Sam sprawdź.
Re: Pobranie wartosci z linku przepisanego do zmiennej
Dude, chill.
Co do "tego, co przed '?'" - OP pytał o pozyskiwanie samych wartości i podał przykładowy link z ?wartosc=1&nazwa=y. Dla mnie w tym momencie pierwszy explode() na znak zapytania w takim przypadku traci sens.
Ale ok, załóżmy, że pavelw potrzebuje również tego, co jest przed '?'. Wtedy przyznaję, explode() się przyda, chociaż osobiście zrobiłbym to z list(), o tak (najistotniejsza jest trzecia linijka):
Ale, jak to się mówi, każdemu jego porno 
Co do "tego, co przed '?'" - OP pytał o pozyskiwanie samych wartości i podał przykładowy link z ?wartosc=1&nazwa=y. Dla mnie w tym momencie pierwszy explode() na znak zapytania w takim przypadku traci sens.
Ale ok, załóżmy, że pavelw potrzebuje również tego, co jest przed '?'. Wtedy przyznaję, explode() się przyda, chociaż osobiście zrobiłbym to z list(), o tak (najistotniejsza jest trzecia linijka):
Kod: Zaznacz cały
$link = "http://www.strona.pl?wartosc=1&nazwa=2";
$efekt_koncowy = array();
list($efekt_koncowy["adres"], $obrobka) = explode("?", $link);
$obrobka = explode('&', $obrobka);
foreach ($obrobka as $kombinacja) {
list($zmienna, $nazwa) = explode('=', $kombinacja);
$efekt_koncowy($zmienna) = $nazwa;
}
print_r($efekt_koncowy);Re: Pobranie wartosci z linku przepisanego do zmiennej
Mały drobiazg. Jeżeli w ogóle pomyślałeś by przeczytać post autora tematu to wiedział byś do czego chce użyć. Gdybaniem sobie możnaCo do "tego, co przed '?'" - OP pytał o pozyskiwanie samych wartości i podał przykładowy link z ?wartosc=1&nazwa=y. Dla mnie w tym momencie pierwszy explode() na znak zapytania w takim przypadku traci sens.
Na koniec dodam że to co zrobiłeś to zamienienie 2-elementowej tablicy na 2 zmienne i tyle. Nie wiem czy to zrozumiesz. O ile komuś może wydawać się to czytelniejsze o tyle nie sprawia to kompletnej różnicy w działaniu skryptu.
Chodzi po prostu o to że szczerze mnie rozbawiłeś tym że nazwałeś rozwiązanie (opcjonalne jak byś jeszcze nie zauważył) nieoptymalnym by później bezmyślnie przyklepać je ponownie zmieniając raptem dwa nic nie znaczące drobiazgi (zastosowanie foreach i list).
Re: Pobranie wartosci z linku przepisanego do zmiennej
Kulą w płot ten atak. A widzę też, że nie przeczytałeś mojego ostatniego posta tutaj.gorylek pisze:Jeżeli w ogóle pomyślałeś by przeczytać post autora tematu to wiedział byś do czego chce użyć.
Może krótsza piłka, w formie dwóch pytań:
1. Zgadzamy się, że jeśli chodziło mu tylko o wartości, a nie o sam bazowy url, to pierwszy explode() w Twoim kodzie jest bez sensu?
2. Zgadzamy się też, że w moim rozwiązaniu eliminujemy trzy zmienne, których używasz przy ostatnim explodzie ($i nie liczę), jak również operację count()?
I jeszcze, już kompletnie poza konkursem, ustaliliśmy, że pierwszy wariant jest li tylko ciekawostką (nawiasem mówiąc, skoro piszesz, że podany jako ciekawostka, to nie rozumiem, czemu nie podałeś go w drugiej kolejności), w związku z tym cała dyskusja o nim ma charakter raczej akademicki, right?
Re: Pobranie wartosci z linku przepisanego do zmiennej
Ty widzę chyba czegoś nie rozumiesz. Sugestia dla Ciebie, przynajmniej się czegoś nauczysz. Kojarzysz coś co się zwie xdebug ? Przepuść oba skrypty i porównaj raport
Tłumaczyć widzę nie ma sensu. Poza tym nic nie wyeliminowałeś a zastąpiłeś zaś operacja count jest tak debilnie prosta i szybka oraz operuje na tablicach o tak małym rozmiarze że nie mamy z niej żadnego wartego uwagi narzutu. A wyciągnięta przed for jest po to by nie była przeprowadzana przy każdym przebiegu pętli.
Re: Pobranie wartosci z linku przepisanego do zmiennej
Czyli: oba skrypty wykonują się porównywalnie sprawnie, w granicach błędu statystycznego. Tak?
Re: Pobranie wartosci z linku przepisanego do zmiennej
Zgadłeś. Twój komentarz po prostu sugerował że nie masz pojęcia czym jest optymalizacja skryptu - a przynajmniej mogło by się tak wydawać. Stąd mój komentarz.
No i na prawdę sugeruję Ci byś poznał genialne narzędzie jakim jest xdebug. Rozłoży Ci skrypt na czynniki pierwsze i pozwoli wyszukać tzw "wąskie gardła".
No i na prawdę sugeruję Ci byś poznał genialne narzędzie jakim jest xdebug. Rozłoży Ci skrypt na czynniki pierwsze i pozwoli wyszukać tzw "wąskie gardła".
Re: Pobranie wartosci z linku przepisanego do zmiennej
Czyli otrzymujemy dwa porównywalnie szybkie skrypty, z których jeden jest o kilkadziesiąt procent* krótszy? 
Nie zrozum mnie źle, ja po prostu lubię tego rodzaju nerd-puzzle, gdzie jeżeli coś da się zrobić lepiej, to w sumie czemuby nie
A co do xdebuga - dzięki za przypomnienie, że takie coś istnieje. Kojarzy mi się, że było toto chyba zintegrowane z NetBeansami, ale gryzło się trochę z codeIgniterem, więc na codzień używam raczej CI'owego benchmarking class'a i chytrze porozmieszczanych echo i die()
*nie, żeby w tym przypadku to robiło jakąś znaczącą różnicę
Nie zrozum mnie źle, ja po prostu lubię tego rodzaju nerd-puzzle, gdzie jeżeli coś da się zrobić lepiej, to w sumie czemuby nie
A co do xdebuga - dzięki za przypomnienie, że takie coś istnieje. Kojarzy mi się, że było toto chyba zintegrowane z NetBeansami, ale gryzło się trochę z codeIgniterem, więc na codzień używam raczej CI'owego benchmarking class'a i chytrze porozmieszczanych echo i die()
*nie, żeby w tym przypadku to robiło jakąś znaczącą różnicę
Re: Pobranie wartosci z linku przepisanego do zmiennej
Na prawdę dowiedz się co to xdebug bo nie masz pojęcia z tego co czytam. Znajdź sobie też coś ciekawego do interpretacji raportów. Co do skryptu to patrzę i patrzę i nie mogę zrozumieć w którym miejscu to krótsze jest, szybsze na pewno nie jest. Dla nerdów pozostaje druga wersja (2 instrukcje w końcuA co do xdebuga - dzięki za przypomnienie, że takie coś istnieje. Kojarzy mi się, że było toto chyba zintegrowane z NetBeansami, ale gryzło się trochę z codeIgniterem, więc na codzień używam raczej CI'owego benchmarking class'a i chytrze porozmieszczanych echo i die()
Re: Pobranie wartosci z linku przepisanego do zmiennej
Tam dla nerdów. Dla nerdów to jest assembler i malbolge, ewentualnie LOLCODE. 
Re: Pobranie wartosci z linku przepisanego do zmiennej
Jakoś za nerda się nie uważam a w assemblerze nie jedno w życiu wyklepałem 

