DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   PHP (http://www.devprotalk.com/forumdisplay.php?f=9)
-   -   Vrednosti niza kao argumenti funkcije (http://www.devprotalk.com/showthread.php?t=6454)

salebab 14. 10. 2008. 21:43

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!

zira 14. 10. 2008. 22:38

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

jablan 14. 10. 2008. 22:55

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

bluesman 14. 10. 2008. 22:58

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];



salebab 14. 10. 2008. 23:00

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? :)

bluesman 14. 10. 2008. 23:08

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.

salebab 14. 10. 2008. 23:36

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,)) :D

misk0 15. 10. 2008. 00:03

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.

salebab 15. 10. 2008. 00:18

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 :)

ivanhoe 15. 10. 2008. 02:35

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


Vreme je GMT +2. Trenutno vreme je 02:20.

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.