Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
sõnum |
|
tooming
HV vaatleja
liitunud: 19.03.2007
|
25.01.2008 23:33:26
PHP - funktsioon ei väljasta tulemust |
|
|
Tegelen siin .csv faili töötlemisega ning väliselt lihtne asi tekitab raskusi. (Eks kellaaeg pole ka enam väga soodne)
Nimi tuleb sellise masiivina, kus perekonnanimi on alati viimane ning väljastada on vaja eesnimi.
$nimi = array('martin', 'karl', 'ants', 'tooming'); |
Esinimede arv võib varieeruda. Kindlasti on lihtsam viis selleks, kuid mina mõtlesin välja praegu sellise asja:
function eesnimi($array, $nimi=''){
$nimi .= ' '.array_shift($array);
echo '$nimi = '.$nimi.'<br>';
if(count($array)>1){
echo 'eenimesid on veel<br>';
eesnimi($array, $nimi);
}else {
echo 'läheb väljastamiseks: <br>';
return $nimi;
}
}
$nimi = array('martin', 'jüri', 'jaan', 'perekonnanimi');
$eesnimi = eesnimi($nimi);
echo $eesnimi; |
Mis väljastab sellise asja:
$nimi = martin
eenimesid on veel
$nimi = martin jüri
eenimesid on veel
$nimi = martin jüri jaan
läheb väljastamiseks:
|
Ja kogu probleem on selles, et tegelikult ei väljasta funktsioon neid esinimesid, kuigi vahetult enne on funktsioonis $nimi väärtus martin jüri jaan. Mõtteid?
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
4 |
|
tagasi üles |
|
|
andrusny
Kreisi kasutaja
liitunud: 20.03.2006
|
25.01.2008 23:51:33
|
|
|
Aga sa tead ju mitu elementi on massiivis. Kuna on alati üks perekonnanimi ja suvalt eesnimesid loobid kõik esimesed array liikmed välja ja viimase jätad väljastamatta. Oletame, et sull on 4 osaline massiiv vaja siis välja ajada kolm esimest.
<?php
$nimi = array('martin', 'karl', 'ants', 'tooming');
$ii=count($nimi);
for ($i=0;$i<$ii-1;$i++){
echo $nimi[$i].'<br>';}
?> |
ja kogu lugu.
_________________
|
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
|
Celion
HV kasutaja
liitunud: 31.10.2002
|
26.01.2008 00:04:31
|
|
|
andrusny pakutud lahendus on küll parem, aga kui originaalset koodi parandada (oma vigadest õppimiseks), siis on if osast lihtsalt return puudu:
if(count($array)>1){
echo 'eenimesid on veel<br>';
return eesnimi($array, $nimi);
}else { ... |
_________________ Ostan Roger Zelazny "Amberi kroonikad" (soovitatavalt eesti keeles). |
|
Kommentaarid: 46 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
45 |
|
tagasi üles |
|
|
sharkey
HV vaatleja
liitunud: 26.11.2005
|
26.01.2008 06:01:03
|
|
|
Et paremini näha oleks, mis toimub ja miks ei väljastata oodatud tulemust, võiksid lisada funktsiooni lõppu muutuja $nimi väljaprintimise.
...
else {
echo 'läheb väljastamiseks: <br>';
return $nimi;
}
} |
Ja nagu juba eespool mainitud, oleks iteratiivne lahendus palju parem.
Spoiler
function eesnimi($array, $nimi=''){
$length = count($array);
while($length-- > 1)$nimi .= ' '.array_shift($array);
return $nimi;
}
//või siis kiirem peaks olema
function eesnimi($array, $nimi=''){
array_pop($array);
return $nimi.' '.implode($array, ' ');
} |
|
|
Kommentaarid: 3 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
3 |
|
tagasi üles |
|
|
Fukiku
Kreisi kasutaja
liitunud: 06.11.2003
|
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
|
tooming
HV vaatleja
liitunud: 19.03.2007
|
26.01.2008 20:48:31
|
|
|
Tänud kõigile! sharkey lahendus kõige parem siiski. Piisab lihtsalt viimase elemendi kustutamisest.
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
4 |
|
tagasi üles |
|
|
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|