Avatar billede connorz Nybegynder
02. juni 2007 - 11:45 Der er 10 kommentarer og
1 løsning

Funktion der returnerer sidste element i et array

Hejsa

Jeg ønsker en funktion, som returnerer det sidst tilføjede element fra et array. Men det skal være en reference til denne variable, da senere ændringer skal reflekteres i arrayet. Fx

$a = array();
$a[] = "apple";
$b = cur($a);
$b = "orange";
print_r($a);

Jeg mangler funktionen "cur". Eksemplet skal udskrive
Array
(
    [0] => orange
)

Kan jeg det??

Jeg har forsøgt med:
function cur(&$arr) {
    if (count($arr)==0)
        return false;
    $v = & $arr[count($arr)-1];
    return $v;
}

Men det virker ikke! (Ved godt, at denne funktion kun "virker" med indeks arrays, men det er fint til mit brug).

Kan det jeg vil overhovedet lade sig gøre??!!
Avatar billede barklund Nybegynder
02. juni 2007 - 11:58 #1
Det er virkelig ikke en pæn måde at gøre noget som helst på. Primitive variabler bør forblive primitive - og derfor er hele det her reference-noget også lavet meget mere "normalt " i php5 - så det er kun i php4 du kan lave noget i den stil.

Kunne du ikke eventuelt lave en klasse, der kunne nogle af disse ting - for eksempel $mystruct->getCur(); og $mystruct->setCur("orange");

--
Morten Barklund
Avatar billede erikjacobsen Ekspert
02. juni 2007 - 12:00 #2
Jeg skal ikke kunne sige om det er en god idé eller ej, men jeg tvivler stærkt. Men man kan da godt, hvis man drysser tilpas mange &-ere omkring:

$a = array();
$a[] = "apple";
$b =& cur($a);
$b = "orange";
print_r($a);

function &cur(&$arr) {
    if (count($arr)==0)
        return false;
    return $arr[count($arr)-1];
}
Avatar billede connorz Nybegynder
02. juni 2007 - 12:04 #3
Jeg synes ikke erikjacobsens eksempel virker. Er det så fordi jeg bruger PHP5??

Men det kunne da vist godt være, at jeg skulle overveje en mere OO løsning så :)

Altid godt at vide, at man er lidt afsporet, så man kan komme "tilbage" igen :D
Avatar billede erikjacobsen Ekspert
02. juni 2007 - 12:07 #4
Mit er afprøvet på PHP Version 5.2.2, se: http://n0p.com/781352.php
Avatar billede connorz Nybegynder
02. juni 2007 - 12:19 #5
Ahh... Jeg havde overset den &, der er ved $b = &cur($a)
My bad...

Smid svar begge to, så splitter jeg pointene - tak for hjælpen...

Tror jeg laver en OO løsning i stedet :p
Avatar billede barklund Nybegynder
02. juni 2007 - 12:20 #6
'=&' snyder lidt, da det ligner en operator. '&=' er en operator, men '=& $foo' er jo blot '= &$foo'. Men i det hele taget var php4's referencer noget rod. :)
Avatar billede erikjacobsen Ekspert
02. juni 2007 - 12:20 #7
Ingen point til mig, tak.
Avatar billede barklund Nybegynder
02. juni 2007 - 12:20 #8
Og et svar :)
Avatar billede connorz Nybegynder
02. juni 2007 - 12:30 #9
erikjacobsen >>> hvorfor ikke?
Avatar billede erikjacobsen Ekspert
02. juni 2007 - 12:37 #10
Pointsystemet giver kun ævl og kævl. Jeg samler slet ikke på dem.
Avatar billede barklund Nybegynder
02. juni 2007 - 14:15 #11
Pointsystemet har den fordel, at man får gratis pro-medlemskab måneden efter, hvis man ligger i top 100 for en given måned. Og pro-medlemskab giver bedre mails fra eksperten :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester