DevProTalk

Forumi IT profesionalaca
web development, web design, e-business, SEO


Idite nazad   DevProTalk > Web development i web aplikacije > PHP
Želite da se reklamirate ekskluzivno na ovoj poziciji? Javite se

PHP PHP aplikacije, Smarty, PEAR

Odgovori
 
Alati teme Način prikaza
Staro 14. 10. 2008.   #1
salebab
profesionalac
Qualified
 
Avatar salebab
 
Datum učlanjenja: 09.11.2006
Lokacija: Beograd
Poruke: 102
Hvala: 19
21 "Hvala" u 18 poruka
salebab is on a distinguished road
Pošaljite ICQ poruku za salebab Pošaljite poruku preko MSN za salebab
Default Vrednosti niza kao argumenti funkcije

Pozdrav, trebala bi mi mala pomoc, neki hint, bilo sta...

Recimo da imam niz:
Kôd:
$car = array('opel', 'black', 2008, 15000);
I da zelim da vrednosti niza posaljem kao zasebne argumente nekoj funkciji, npr:
Kôd:
function mycar($model, $color, $year, $price) { ... }
Ima li iko ideju kako to uraditi?
Hvala!
__________________
www.salebab.net
salebab je offline   Odgovorite uz citat
Staro 14. 10. 2008.   #2
zira
Vladan Zirojević
Grand Master
 
Datum učlanjenja: 09.06.2006
Lokacija: Beograd/Trebinje
Poruke: 903
Hvala: 106
183 "Hvala" u 82 poruka
zira ima spektakularnu auruzira ima spektakularnu auruzira ima spektakularnu auru
Pošaljite ICQ poruku za zira Pošaljite poruku preko Skype™ za zira
Default

U tvom slucaju, pozivas f-ju:

mycar($car[0], $car[1], $car[2], $car[3]);

ili preneses cijeli niz kao

mycar($car);

pa na nivou funkcije odredjujes sta ces raditi sa clanovima niza.

Inace, u ovakvom slucaju bi bilo bolje niz definisati kao asocijativni, kao:

$car = array('model'=>'opel', 'color'=>'black', 'year'=>2008, 'price'=>15000);

da se za par mjeseci ne bi pitao sta ono bjese $car[3].

Elementima ovakvog asocijativnog niz kasnije pristupas sa

$car['model'] i slicno.

Predlazem ti da procitas i isprobas:
http://oreilly.com/catalog/progphp/chapter/ch05.html
__________________
Donesi.com SrediMe
zira je offline   Odgovorite uz citat
Staro 14. 10. 2008.   #3
jablan
VD IT Direktora
Invented the damn thing
 
Avatar jablan
 
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
jablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamen
Default

Off Topic:
Mali, ničim izazvani Ruby showoff:
Kôd:
>> car = ['opel', 'black', 2008, 15000]
=> ["opel", "black", 2008, 15000]
>> def mycar model, color, year, price
>> puts "Model: #{model}, color: #{color}, year: #{year}, price: #{price}"
>> end
=> nil
>> mycar *car
Model: opel, color: black, year: 2008, price: 15000
=> nil
:P
jablan je offline   Odgovorite uz citat
Staro 14. 10. 2008.   #4
bluesman
Goran Pilipović
Sir Write-a-Lot
 
Avatar bluesman
 
Datum učlanjenja: 18.05.2005
Lokacija: Beograd
Poruke: 5.450
Hvala: 288
1.247 "Hvala" u 446 poruka
bluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušati
Pošaljite ICQ poruku za bluesman
Default

Preneses ceo niz function mycar($car) pa ako ti bas smeta da radis sa elementima niza, onda uradis PHP manual: extract, ali to zahteva da imas asocijativni niz, kao ovo sto je zira rekao.

Na primer preneses:
PHP kôd:
$car = array('model'=>'opel''color'=>'black''year'=>2008'price'=>15000);

function 
mycar($car)
{
    
extract($car);

// dobijes
$model 'opel';
$color 'black';
$year 2008;
$price 15000;

ili ako neces asocijativni niz, mozes sa list:
PHP kôd:
function mycar($car)
{
    list(
$model$color$year$price) = $car;

// dobijes
$model $car[0];
$color =  $car[1];
$year =  $car[2];
$price =  $car[3];

__________________
Goran Pilipović a.k.a. Ugly Fingers Bradley f.k.a. bluesman
I don't always know what I'm talking about but I know I'm right!
bluesman je offline   Odgovorite uz citat
Staro 14. 10. 2008.   #5
salebab
profesionalac
Qualified
 
Avatar salebab
 
Datum učlanjenja: 09.11.2006
Lokacija: Beograd
Poruke: 102
Hvala: 19
21 "Hvala" u 18 poruka
salebab is on a distinguished road
Pošaljite ICQ poruku za salebab Pošaljite poruku preko MSN za salebab
Default

Uf, uf, zaboravio sam samo da napisem da niz nema uvek isti broj elemenata. Znaci kada ima jedan element funkciji se prosledjuje samo jedan argument, kada ih ima 10, prosledjuje se 10 argumenata...
Dakle, trebam da napravim takav algoritam, da koliko god elemnata ima niz ja trebam da ih pretvorim u argumente funkcije. Takodje, ne odgovara mi da prosledim ceo niz kao jedan argument.

Takvu neku foru sam video kod CodeIgnitera kada segmente URI-a prosledjuje metodi kao zasebne argumente...

Nadam se da je sada jasnije sta zelim?
__________________
www.salebab.net

Poslednja izmena od salebab : 14. 10. 2008. u 23:04.
salebab je offline   Odgovorite uz citat
Staro 14. 10. 2008.   #6
bluesman
Goran Pilipović
Sir Write-a-Lot
 
Avatar bluesman
 
Datum učlanjenja: 18.05.2005
Lokacija: Beograd
Poruke: 5.450
Hvala: 288
1.247 "Hvala" u 446 poruka
bluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušati
Pošaljite ICQ poruku za bluesman
Default

Ako je vec tako, da li moze da se zna zasto ti ne odgovara da prosledis ceo niz?

To je verovatno iz nekog formulara, POST ili GET, onda nemoj da prosledjujes nista nego citaj iz POST ili GET direktno.

A moze, naravno da moze, samo gubi se bilo kakav smisao kada funciji prosledjujes 10 argumenata.
__________________
Goran Pilipović a.k.a. Ugly Fingers Bradley f.k.a. bluesman
I don't always know what I'm talking about but I know I'm right!
bluesman je offline   Odgovorite uz citat
Staro 14. 10. 2008.   #7
salebab
profesionalac
Qualified
 
Avatar salebab
 
Datum učlanjenja: 09.11.2006
Lokacija: Beograd
Poruke: 102
Hvala: 19
21 "Hvala" u 18 poruka
salebab is on a distinguished road
Pošaljite ICQ poruku za salebab Pošaljite poruku preko MSN za salebab
Default

Ne odgovara mi zato sto korisnik kreira taj niz, a nije fiksan broj elemenata. Suvise mi je komplikovano da u metodi proveravam koliko ima elemata, pa onda switch... Mnogo mi jednostavnije da imam default vrednosti, npr: function myfunc($arg1 = "nesto", $arg2 = "nesto2" ...); a da niz pretvorim u argumente.

Recimo ovako neki pseudo kod
myfunc( foreach($niz as $value): $value,))
__________________
www.salebab.net

Poslednja izmena od salebab : 14. 10. 2008. u 23:47.
salebab je offline   Odgovorite uz citat
Staro 15. 10. 2008.   #8
misk0
majstor
Wrote a book
 
Avatar misk0
 
Datum učlanjenja: 30.01.2006
Lokacija: Lugano - Switzerland
Poruke: 1.251
Hvala: 219
106 "Hvala" u 67 poruka
misk0 će postati "faca" uskoromisk0 će postati "faca" uskoro
Pošaljite ICQ poruku za misk0 Pošaljite poruku preko Skype™ za misk0
Default

A kako ces utvrditi koliko ti je elemena proslijedjeno? Array ima length i na osnovu toga kreiras petlju i shibas po citavom nizu.

Ne znam da li PHP ima mogucnost definisanja neodredjenog broja argumenata kod definicije funkcije. Mozes definisati 100 argumenata i odmah im postaviti default vrijednost i proglasiti ih za ne obaveznim da ne bi dobio greske prilikom izvodjenja.
misk0 je offline   Odgovorite uz citat
Staro 15. 10. 2008.   #9
salebab
profesionalac
Qualified
 
Avatar salebab
 
Datum učlanjenja: 09.11.2006
Lokacija: Beograd
Poruke: 102
Hvala: 19
21 "Hvala" u 18 poruka
salebab is on a distinguished road
Pošaljite ICQ poruku za salebab Pošaljite poruku preko MSN za salebab
Default

Pa moze se utvrditi koliko joj je prosledjeno sa func_num_args(), ali meni to ne treba. Cak me i ne zanima koliko je prosledjeno. Npr jedna metoda prihvata recimo 3 argumenta, ako je prosledjeno 2, super, ja imam i treci koji je default. Ako je prosledjeno 10, tih 7 argumenata ce biti ignorisano Neka druga metoda mozda prihvata vise, neka cak i ne koristi atribute. Tako da je sa te strane sve u redu. Problem je sa druge strane, kad pozivam te metode zelim da im prosledim sve vrednosti iz tog niza kao zasebne argumente, to je to
__________________
www.salebab.net
salebab je offline   Odgovorite uz citat
Staro 15. 10. 2008.   #10
ivanhoe
Ivan Dilber
Sir Write-a-Lot
 
Avatar ivanhoe
 
Datum učlanjenja: 18.10.2005
Lokacija: Bgd
Poruke: 5.320
Hvala: 104
2.344 "Hvala" u 583 poruka
ivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svima
Pošaljite poruku preko Skype™ za ivanhoe
Default

Ako sam razumeo pitanje:
a) f-ju mozes pozvati sa proizvoljnim brojem argumenata (iz niza) pomocu call_user_func_array()
b) unutar funkcije mozes da primis te parametre pomocu func_get_args()

ja slicnu foru koristim za wrapper za mysqli funkcije u novom projektu, i zacudo uopste nije mnogo sporije od klasicnog koda..
__________________
Leadership is the art of getting people to want to do what you know must be done.

Poslednja izmena od ivanhoe : 15. 10. 2008. u 02:39.
ivanhoe je offline   Odgovorite uz citat
"Hvala" ivanhoe za poruku:
Odgovori


Alati teme
Način prikaza

Pravila pisanja
Možete ne započinjati nove teme
Možete ne slati odgovore
Možete ne slati priloge
Možete ne izmeniti svoje poruke
vB kôd je Uključen
Smajliji su Uključen
[IMG] kod je Uključen
HTML kôd je Isključen
Pogledajte forum

Slične teme
Tema Početna poruka teme Forum Odgovori Poslednja poruka
php f-ja za merge 2 niza ivanhoe PHP 5 02. 11. 2009. 21:06
relacija izmedju elemenata dva niza gope Sva početnička pitanja 3 22. 04. 2009. 17:00
Elegantnije filtriranje niza Pedja PHP 4 20. 07. 2007. 23:02
vracanje niza iz funkcije bojan_bozovic PHP 4 06. 02. 2006. 10:23


Vreme je GMT +2. Trenutno vreme je 13:27.


Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.
Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.