Toon posts:

[php] key($array) werkt niet?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Wat ik wil bereiken is dat de ik de een-na-laatste waarde uit een array wil lezen. In eerste instantie heb ik dit geprobeerd:
code:
1
$todolist[count($todolist)-1]


Maar dit werkt dus niet. (als ik bijvoorbeeld bovenstaande print()) krijg ik niks op scherm.

Dus ik dacht, dan doe ik't anders en gebruik ik key():

code:
1
2
3
end($todolist);
$hallo = (int) key($todolist);
print ($hallo);


Dit geeft ALTIJD 0 als waarde. Ik doe echt m'n best om zelf tot oplossing te komen van zulk soort dingen, maar volgens de manual zou dit moeten werken volgens mij :(

Verwijderd

Is key($todolist) wel een numerieke waarde? Anders zal het bij het converteren naar int 0 worden,

Verwijderd

PHP:
1
2
echo $todolist[count($todolist)-1]; // de laatste waarde
echo $todolist[count($todolist)-2]; // de een-na-laatste waarde

waarom? omdat $todolist[0] de eerste waarde is. count($todolist) geeft het aantal waardes in je array en omdat een array in php bij [0] begint, moet je dus terugtellen in jouw geval.

kom je er dan nog niet uit, doe dan s een
PHP:
1
print_r($todolist);

Verwijderd

Topicstarter
goede vraag.
mixed key ( array array)
Staat in de manual. Dus een "mixed". Maar dat is in feite een integer (wellicht als string).
Ik niet weten

Verwijderd

Topicstarter
Darth, ja sorry, ik had nu nog -1 staan ivm het vergelijken van een wat lastige string (een-na-laatste) terwijl laatste een makkie is :)
ff kijken wat print_r() doet.
Hmmm als ik print_r(blabla) doe krijg ik niks op m'n scherm...
/me confused. Dan zit't dus al in die count ofzo?
ff alleen count doen
Als ik print_r (count($todolist)); doe krijg ik 0?!?!?!?!?! (print() zal wel zelfde zijn)

Verwijderd

Topicstarter
en even voor de duidelijkheid, die array gebruik ik continu dus daar is niks mis mee lijkt me

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 12-07 11:54
PHP:
1
2
3
$lastitem = end($todolist);

echo $lastitem; // if lastitem is a string

Verwijderd

Verwijderd schreef op 02 oktober 2002 @ 19:38:
Darth, ja sorry, ik had nu nog -1 staan ivm het vergelijken van een wat lastige string (een-na-laatste) terwijl laatste een makkie is :)
ff kijken wat print_r() doet.
Hmmm als ik print_r(blabla) doe krijg ik niks op m'n scherm...
/me confused. Dan zit't dus al in die count ofzo?
ff alleen count doen
Als ik print_r (count($todolist)); doe krijg ik 0?!?!?!?!?! (print() zal wel zelfde zijn)
ik doelde eigenlijk op print_r($todolist) en niet een andere variant. Als het goed is, dan krijg je zo de inhoud van je array te zijn. Als $todolist leeg is, dan krijg je iets als
code:
1
2
3
array (
)
1

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Verwijderd schreef op 02 oktober 2002 @ 19:38:
Darth, ja sorry, ik had nu nog -1 staan ivm het vergelijken van een wat lastige string (een-na-laatste) terwijl laatste een makkie is :)
ff kijken wat print_r() doet.
Hmmm als ik print_r(blabla) doe krijg ik niks op m'n scherm...
/me confused. Dan zit't dus al in die count ofzo?
ff alleen count doen
Als ik print_r (count($todolist)); doe krijg ik 0?!?!?!?!?! (print() zal wel zelfde zijn)
Dan zal je array leeg zijn...

Doe es:
reset($todolist);
echo count($todolist);

oid dan?

Verwijderd

Topicstarter
Stekkel: Mjah ik wil dus de een-na-laatste hebben, dus dat werkt helaas niet.
Maar ik denk dat't probleem gevonden is met print_r($todolist);. Ik krijg dan helemaal NIKS op m'n scherm, maar dan ook echt NIKS. Geen "array" etc.
Zou het kunnen dat: $todolist is gedefinieerd binnen het hoofdgedeelte, en geregistered als session-variabele (session_register()). Ik probeer nu $todolist te gebruiken in een FUNCTIE. Deze functie staat in het bestand VOOR de session-start. Echter de aanroep staat gewoon netjes onder session-start.
Snappu?
(zo stond't op php.net geloof ik, of't voorbeeld wat ik heb bekeken over sessions..)

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 12-07 11:54
Verwijderd schreef op 02 oktober 2002 @ 19:47:
Stekkel: Mjah ik wil dus de een-na-laatste hebben, dus dat werkt helaas niet.
Maar ik denk dat't probleem gevonden is met print_r($todolist);. Ik krijg dan helemaal NIKS op m'n scherm, maar dan ook echt NIKS. Geen "array" etc.
Zou het kunnen dat: $todolist is gedefinieerd binnen het hoofdgedeelte, en geregistered als session-variabele (session_register()). Ik probeer nu $todolist te gebruiken in een FUNCTIE. Deze functie staat in het bestand VOOR de session-start. Echter de aanroep staat gewoon netjes onder session-start.
Snappu?
(zo stond't op php.net geloof ik, of't voorbeeld wat ik heb bekeken over sessions..)
het maakt niet uit of functies voor een session start staan. Het gaat zoals je al zij om de functie aanroep.
Wanneer je echter class objecten wilt opslaan in die array dan moet de class definitie voor de session_start geplaatst worden.

Wanneer je met register globals = off werkt in je php.ini dan kan je de $todolist var ophalen door:
$todolist = $_SESSION['todolist'];

Bij register_globals = off volstaat een simpele
global $todolist;


Wat betreft die een na laatste, sorry, verkeerd gelezen. Oplossing is:
PHP:
1
2
3
end($todolist);
$item = prev($todolist);
echo $item;

Verwijderd

Verwijderd schreef op 02 oktober 2002 @ 19:47:
Stekkel: Mjah ik wil dus de een-na-laatste hebben, dus dat werkt helaas niet.
Maar ik denk dat't probleem gevonden is met print_r($todolist);. Ik krijg dan helemaal NIKS op m'n scherm, maar dan ook echt NIKS. Geen "array" etc.
Zou het kunnen dat: $todolist is gedefinieerd binnen het hoofdgedeelte, en geregistered als session-variabele (session_register()). Ik probeer nu $todolist te gebruiken in een FUNCTIE. Deze functie staat in het bestand VOOR de session-start. Echter de aanroep staat gewoon netjes onder session-start.
Snappu?
(zo stond't op php.net geloof ik, of't voorbeeld wat ik heb bekeken over sessions..)
session_start() heeft niets te maken het wel of niet global zijn van je variabelen. Ik denk dat je of $GLOBALS["todolist"][count($GLOBALS["todolists"])-1] moet gebruiken, of als $todolist een sessie-var is $_SESSIONS["todolist"], als je nog een wat oudere php versie gebruikt, even
PHP:
1
2
3
4
function bla() {
  global $todolist;
  // de rest van je code
}


doen.

global $var vinden de meeste mensen hier niet zo mooi ;). Wat je evt. ook nog zou kunnen doen, is de array meegeven aan je functie dmv bla($todolist) oid.

Verwijderd

Wordt die variabele wel op een of andere manier doorgegeven? Anders is het logisch dat hij niet werkt vanuit die functie...

edit:
Crosspost ;)

Verwijderd

Topicstarter
Ok dat laatste is perfect, daar had ik nog niet zelf bedacht. Ik neem aan dat $item dan alleen blijft bestaan tijdens het uitvoeren van die functie en dat-ie daarna gelijk opgeruimd wordt?
Maar dan zit ik nog steeds met het probleem dat die array leeg is.
Oh wacht een string is een class object. Dat heb ik een keer met java gehad.
Uhm
denk denk
class-definitie voor session_start?
Wat bedoel je met class-definitie?
array ($todolist) ofzo? Ik niet snap
(sorry)

Verwijderd

PHP:
1
2
3
4
5
6
7
8
function krijglaatsteelement($array)
{
return($array[count($array) - 2]);
}

session_start();

$laatstelement = krijglaatseelement($todolist);


Je zou zoiets moeten proberen. $laatstelement is dan het eennalaatste element uit $todolist.

[ Voor 0% gewijzigd door Verwijderd op 02-10-2002 20:02 . Reden: Toevoeging ]


Verwijderd

Topicstarter
JRR: ikke crosspost? Niet dat ik weet iig. Stel wel meer vragen, maar laatste was gisteren en ging ergens anders over.. Ik niet snap :) Maar laat maar :)
Darth: Als Global niet lekker is dan geef ik'm wel mee aan de functie.. I guess. Is dat wel een "nette" oplossing dan? Wil als't kan alles een beetje netjes doen (jaja ik weet't das lastig als je net 2 dagen met php bezig bent :]).
Anyway als de site af is post ik de source nog wel en dan hoop ik commentaar te krijgen zodat ik't kan verbeteren :)
Op't moment nog even geheimpje ;)
*IK* ben't iig nog niet tegengekomen, en in't zoeken naar de benodigde info zou dat toch wel een keer gebeurd moeten zijn denk ik :)
ANYWAY
Thanks. Als't netter kan hoor ik't graag :)

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 12-07 11:54
Verwijderd schreef op 02 oktober 2002 @ 19:57:
Ok dat laatste is perfect, daar had ik nog niet zelf bedacht. Ik neem aan dat $item dan alleen blijft bestaan tijdens het uitvoeren van die functie en dat-ie daarna gelijk opgeruimd wordt?
Maar dan zit ik nog steeds met het probleem dat die array leeg is.
Oh wacht een string is een class object. Dat heb ik een keer met java gehad.
Uhm
denk denk
class-definitie voor session_start?
Wat bedoel je met class-definitie?
array ($todolist) ofzo? Ik niet snap
(sorry)
vergeet het class / object verhaal. Waarschijnlijk sla jij gewoon strings op in die array.
Variabelen binnen een functie zoals dat $item waar jij aan refereerd bestaan alleen binnen de functie tenzij je deze opslaat in de sessie door een session_register('item'). Let wel dat $item dan global moet zijn aangezien aan het eind van je script de sessie pas weggeschreven wordt.

even terugkomen op classes. Het is mogelijk om in php classes te definieren. een class kan functies en variabelen bevatten. Voor uitleg, zie de manual.

Verwijderd

Met crosspost bedoelde ik Darthraider en ik tegelijkertijd posten. FF om aan te geven dat ik niet wou spammen ofzo. Onze posts waren ook bijna gelijk trouwens ;)

Verwijderd

Topicstarter
Ok nou heb ik't voor elkaar (!)
Gaat niet goed dus...
MAAR
Ik heb't nu als volgt opgelost:

PHP:
1
2
3
4
$blabla = $_SESSION["todolist"];
end($blabla);
$item = prev($blabla);
print ($item);

En dit werkt. Ik heb alleen't gevoel dat't niet netjes is en onnodig resources gebruikt. Klopt dat? (ik kan iig op't moment weer verder)

edit:
ik heb btw geprobeerd zonder $item te werken door rechtstreeks in volgend if-statement end($blabla) te gebruiken, maar dat werkt niet.

Verwijderd

PHP:
1
2
3
4
<?
end($_SESSION['todolist']);
print(prev($_SESSION['todolist']));
?> 


Dat is wel iets effecienter, maar het maakt niet veel uit.

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 12-07 11:54
Verwijderd schreef op 02 oktober 2002 @ 20:16:
PHP:
1
2
3
4
<?
end($_SESSION['todolist']);
print(prev($_SESSION['todolist']));
?> 


Dat is wel iets effecienter, maar het maakt niet veel uit.
[php]
2x een lookup in de session array lijkt me minder efficient.

maar ik hoor graag wanneer het anders is :)

Verwijderd

Topicstarter
JRR: dat heb ik geprobeerd, maar dat werkt niet. Dan krijg ik HELE vervelende loop erin? Ik snapte er ook niks van, maar dan print-ie nonstop zooi..

Nog maar eens geprobeerd, maar dat is goed fout geloof ik (no offense!)
:)

Zal wel in mijn code zitten :)
Maar laat maar even zo :)
Ik zal zeker in sources GoT bedanken btw :)

Verwijderd

Dat zal er dan wel aan liggen dat ik $_SESSION['todolist'] (ook no offense, maar je hoort single quotes te gebruiken ;)) direct gebruik.

Verwijderd

Topicstarter
Dat van die single-quotes heb ik ook gelezen (met " gaat-ie de tekst nog interpreteren en kijken of er $vars in zitten) :)
maar goed, gezien de opmerking van Stekkel (waar ik me wel wat bij voor kan stellen) gebruik ik maar het toewijzen van twee tijdelijke variabelen (de array en de prev()).
Nu ff kijken hoe ik een html-file kan includen om tussen te voegen :)
fopen() kan geloof ik wel, maar d'r zal misschien iets makkelijkers zijn :)

Verwijderd

Je wil dus gewoon een HTML bestand includen op een bepaalde plaats? Dat kan met include() ;)

Verwijderd

Topicstarter
mjah hij moet'm wel op scherm weergeven
(ik wil dus in feite een text-bestand print()'en)

Verwijderd

Topicstarter
tis al gelukt, slotje mag :)
Thx for all the help
Pagina: 1