Toon posts:

[PHP] Eerste index van een array

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi,

Ik heb een array, waarvan de indices niet noodzakelijk beginnen met 0, en niet noodzakelijk op elkaar volgen. Bijvoorbeeld:

code:
1
2
$skinArray[4] = "skin 1";
$skinArray[20] = "skin 2";


Nu wil ik dat de eerste index de default template wordt, en die moet dus aangeduid worden als de user nog geen andere template gekozen heeft. Maar hoe zoek ik de eerste index op, op een goede manier?

Ik heb het zo opgelost, maar dat lijkt me niet een goede manier (omdat ik -alle- keys in $temp ga stoppen, en niet de eerste):

PHP:
1
2
$temp = array_keys($skinArray);
define("TEMPLATE_DEFAULT",$skinArray[$temp[0]]);


Op php.net vond ik er niets over (en alleen dus de array_keys() oplossing).

  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 05-08 18:36
Misschien is sort() je vriendje vandaag. "But then again, mebbe not..." :)

Hm, nu voel ik me verplicht je goed te helpen. :/
Moment.

Verwijderd

Topicstarter
Een foreach met een if test ala "if ($i == 1) ..." en achteraan "$i++" heeft ook geen zin, want hij blijft er doorheen loopen.

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
dit werkt wel:
PHP:
1
2
3
4
5
6
7
$test = array();
$test[3] = "blaat3";
$test[1] = "blaat1";
$test[5] = "blaat5";

$keys = array_keys($test);
print(min($keys)); // 1

(als je met eerste laagste bedoelt iig, anders is het gewoon $keys[0])

  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 05-08 18:36
Ah, bij nader inzien is reset() je vriendje.
PHP:
1
define("TEMPLATE_DEFAULT",reset($skinArray));


Deze functie reset ook de internal pointer van je array, dus $skinArray[] = 'bla' werkt dan niet meer zoals verwacht.
Op php.net vond ik er niets over (en alleen dus de array_keys() oplossing).
Dan heb je slecht gezocht. :X

[ Voor 0% gewijzigd door Ericston op 01-09-2002 14:31 . Reden: haakjes in evenwicht + argh, hij vervangt single quote voor ' :( + vermaning ;) ]


Verwijderd

Topicstarter
marcusk schreef op 01 september 2002 @ 14:22:
dit werkt wel:
PHP:
1
2
3
4
5
6
7
$test = array();
$test[3] = "blaat3";
$test[1] = "blaat1";
$test[5] = "blaat5";

$keys = array_keys($test);
print(min($keys)); // 1

(als je met eerste laagste bedoelt iig, anders is het gewoon $keys[0])
Die oplossing had ik toch? :)

min($keys) == $keys[0] omdat array_keys() wel nummert vanaf 0, en opeenvolgend.

Maar het probleem (?) is alleen dat ik slechts de eerste key moet hebben, en niet alle keys (en van daaruit de eerste halen). De functie array_keys() is dus een beetje "overdreven" zeg maar.

Toch bedankt!
Ericston schreef op 01 september 2002 @ 14:23:
Ah, bij nader inzien is reset() je vriendje.
PHP:
1
define("TEMPLATE_DEFAULT",reset($skinArray));


Deze functie reset ook de internal pointer van je array, dus $skinArray[] = 'bla' werkt dan niet meer zoals verwacht.


[...]

Dan heb je slecht gezocht. :X
Neen? ;)

reset() zet de pointer alleen terug naar het begin, niet meer, niet minder? Daarmee heb ik nog geen methode/manier om "dat begin waar de pointer nu naar wijst" aan te spreken?

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Verwijderd schreef op 01 september 2002 @ 14:37:
min($keys) == $keys[0] omdat array_keys() wel nummert vanaf 0, en opeenvolgend.
nee, bij dit voorbeeld is het niet hetzelfde: $keys[0] geeft 3, min($keys) geeft 1.

Verwijderd

Topicstarter
marcusk schreef op 01 september 2002 @ 14:41:
[...]

nee, bij dit voorbeeld is het niet hetzelfde: $keys[0] geeft 3, min($keys) geeft 1.
Het is de bedoeling dat ik die array_keys functie niet ga gebruiken, want die doet "te veel" dan wat ik wil (in de zin van: hij gaat alle keys in een nieuw array stoppen, en dat is allemaal niet nodig).

Akkoord, het is mieregeneuk, maar ik wil het perfect kunnen ;)

  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 05-08 18:36
DiEana:
reset() zet de pointer alleen terug naar het begin, niet meer, niet minder?
Uhm, klik dan even op mijn linkje:
php manual: reset() returns the value of the first array element.
DiEana:
Daarmee heb ik nog geen methode/manier om "dat begin waar de pointer nu naar wijst" aan te spreken?
Volgens mij wil jij een constant genaamd TEMPLATE_DEFAULT definieren als de waarde van het eerste element van het array $skinArray. Teminste dat doet de code die jij aan het begin gaf. En mijn code doet hetzelfde zonder gebruik te maken van een functie die eerst door het hele array moet loopen.

Wat mij betreft ben je klaar.

Je gebruikt trouwens wel veel vraagtekens voor iemand die denkt het beter te weten en niet de code uitprobeert die gegeven is of zelfs niet eens de moeite neemt om op een mooi linkje te klikken. :/

Verwijderd

gebruik een foreach:
PHP:
1
2
3
4
5
reset($array);
while(list($key) = foreach($array)){
   $eerstekey = $key;
   break;
}

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

wat noem je de eerste key?
PHP:
1
2
$test[20]="waarde1";
$test[5]="waarde2";

Als je vindt dat in het bovenste voorbeeld 20 de eerste key is, dan is jou oplossing de beste.
Als je vindt dat 5 de eerste key is, dan is marcusK's oplossing de juiste.

De oplossing van TimD is nogal onhandig, en moet je in principe alleen gebruiken in PHP3 omgevingen. De gebruikte functies stammen namelijk uit die tijd. Ik zou het ook niet vreemd vinden als ze binnenkort depricated worden.

Localhost, sweet localhost


  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 05-08 18:36
Nog even samenvattend, DiEana's oplossing en die van mij doen precies hetzelfde. Alleen zijn we het erover eens dat die van mij efficienter werkt (in de PHP wereld). Dus het is kiezen tussen mijn oplossing en die van marcusk, waarbij DiEana kvdveers dilemma in acht dient te nemen.

[ Voor 0% gewijzigd door Ericston op 01-09-2002 15:41 . Reden: TimD != marcusk ]


  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 12-07 11:54
ook ff in the manual gekeken en het is echt heel simpel:

PHP:
1
2
reset ($ar);
$first_element = current($ar);


Blijkbaar kijken jullie niet goed in de manual of bedenken hele ingewikkelde constructies voor hele simpele dingen door gebrek aan php basis kennis.

zie ook functies als end, pos = alias voor current etc etc.

  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 05-08 18:36
En dat is dus gelijk aan:
PHP:
1
$first_element = reset($ar);

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 12-07 11:54
Ericston schreef op 01 september 2002 @ 16:33:
En dat is dus gelijk aan:
PHP:
1
$first_element = reset($ar);
Ja je hebt helemaal gelijk. Ik had de thread ff gelezen en zag de opmerking dat reset alleen de pointer aan het begin zette en dus blijkbaar niks retourneerde.

FF opgezocht en voila. "Jullie"zoals ik hier boven zei is dus niet op jou van toepassing :) (Mischien een beetje op mij omdat ik verzuimde reset() na te trekken :( )

  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 05-08 18:36
Yes, een medestander! :)
Pagina: 1