login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Array

Offline roy - 13/02/2007 22:29 (laatste wijziging 04/03/2008 09:33)
Avatar van royPHP gevorderde Beste Allemaal,

Ik heb de volgende Array:

  1. <?php $maandnaam = array(1 => "Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"); ?>


Hoe kan ik het index nummer van "Mei" krijgen?
Het moet 5 zijn maar hoe krijg ik dat voor elkaar?

Met vriendelijke groeten,
Roy

24 antwoorden

Gesponsorde links
Offline Wave6 - 13/02/2007 22:31
Avatar van Wave6 PHP beginner
  1. <?php
  2.  
  3. $maandnaam = array("
  4. Januarie","Februarie"); enzovoorts
  5.  
  6. echo $maandnaam[5];
  7.  
  8. ?>
Offline Dolfje - 13/02/2007 22:31
Avatar van Dolfje Gouden medailleGouden medailleGouden medaille

PHP ver gevorderde
PHP.net: array_search
Offline Ibrahim - 13/02/2007 22:32
Avatar van Ibrahim PHP expert
  1. <?php
  2. foreach($maandnaam as $key => $value)
  3. {
  4. if($value == 'Mei')
  5. {
  6. echo $key;
  7. }
  8. }
Offline roy - 13/02/2007 22:45
Avatar van roy PHP gevorderde Helaas geeft dit niet het gewenste resultaat..

de key is 12?
Offline Wave6 - 13/02/2007 22:47
Avatar van Wave6 PHP beginner Beste Roy.

Ik hoop dat je wat aan mijn info heb gehad zo niet laat het me dan weten. Want dan heb ik je vraag aardig verkeerd begrepen als dat het geval is laat dan even duidelijker weten wat je precies bedoeld.
Offline Ultimatum - 13/02/2007 22:50
Avatar van Ultimatum PHP expert doe eens echo '<pre>'. var_dump($maandnaam) .'</pre>'; Zie je alle keys van de array, mss dat je dan ziet wat er fout is..
Offline roy - 13/02/2007 22:50
Avatar van roy PHP gevorderde ik ben bezig met een kalender script...

de naam van de maand is bekend: bv. Mei

Nu wil ik de bestaande array doorlopen en het indexnummer van Mei weten..

Want dat staat in dit geval gelijk aan het maandnummer.


Ik hoop dat ik het een beetje heb verduidelijkt

Greetz,
Roy

PS. mijn reactie net was voor siliecom14
Offline Stijn - 13/02/2007 22:51 (laatste wijziging 13/02/2007 22:52)
Avatar van Stijn PHP expert Dat van Dolfje gedaan? Je moet wel je array goed maken hé. Onnodig om een 2D array te maken, maak een 1D array.

  1. <?php
  2. $maandnaam = array("Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December");
  3. echo array_search('Mei' , $maandnaam);
  4. ?>
Offline roy - 13/02/2007 22:56
Avatar van roy PHP gevorderde dankdank, Het werkt:D

Nog 1 vraagje:

Wat betekend het vraagteken in de volgende syntax?
  1. ($dagnummer < 10 ? "0" : "")
Offline Stijn - 13/02/2007 22:59
Avatar van Stijn PHP expert dat is een verkorte if{}else{} (ken de juiste benaming niet meer). Wat het wilt zeggen:

  1. $nummer = ($dagnummer < 10 ) ? 0 : 1;


als $dagnummer kleiner is dan 10 zal $nummer de waarde 0 krijgen en als dit niet (else) is krijgt het de waarde 1.
Offline Wave6 - 13/02/2007 23:13
Avatar van Wave6 PHP beginner
  1. <?php
  2.  
  3. $nummer = ($dagnummer < 10 ) ? 0 : 1;
  4.  
  5. ?>

Die 0 staat voor FALSE; en 1 staat voor TRUE;
Dacht ik
Het had bijvoorbeeld ook zo gekund
  1. <?
  2.  
  3. $nummer = ($dagnummer < 10 ) ? FALSE : TRUE;
  4.  
  5. ?>
Offline Stijn - 13/02/2007 23:32
Avatar van Stijn PHP expert euhm nee , shit dat was een voorbeeld met integers. Dit kan ook hoor:

  1. <?
  2. $naam = ( isset( $_SESSION['gebruiker'] ) === true ) ? $_SESSION['gebruiker'] : 'Bezoeker';
  3. ?>
Offline dotPixel - 14/02/2007 00:05 (laatste wijziging 14/02/2007 00:05)
Avatar van dotPixel PHP interesse Dat is de ternaire operator (http://www.php.net/manual/nl/language.expressions.php).

Waarom wil je overigens de key van 'mei' weten? Je array is statisch, de maanden veranderen niet van key (oftewel hard coded). Dus dan weet je toch altijd dat mei de key 4 heeft, array begint tellen met 0. Wil je toch maken dat je mei via de key 5 kunt aanroepen:

  1. $int = 5;
  2. echo $maanden[(--$int)];
Offline Dark_Paul - 14/02/2007 09:02
Avatar van Dark_Paul PHP ver gevorderde Ik denk dat hij die key wil weten omdat hij een kalender maakt.
Iemand zoekt bijvoorbeeld naar 'mei', en dan moet hij voor zn database bijvoorbeeld de index daarvan weten. Die array doorzoeken is veel gemakkelijker dan 1if en 11elseif's neer te zetten.

@roy:
wat je misschien kunt doen, is je array omdraaien en dan mbv array_key_exists de waarde ophalen.
  1. <?
  2. $maanden = array('Januari' => 1, 'Februari' => 2, etc..);
  3. if (array_key_exists($_GET['maand'])) {
  4. echo $maanden[$_GET['maand']];
  5. }
  6. else {
  7. echo 'maand bestaat niet!';
  8. }
  9. ?>

die eerste echo zal dan dus het maandnummer van de desbetreffende maand op je scherm weergeven.
Offline Stijn - 14/02/2007 13:26
Avatar van Stijn PHP expert @Dark_Paul: PHP.net: array_flip , da's té van je.
Offline dotPixel - 14/02/2007 15:02
Avatar van dotPixel PHP interesse
Citaat:
Ik denk dat hij die key wil weten omdat hij een kalender maakt.
Iemand zoekt bijvoorbeeld naar 'mei', en dan moet hij voor zn database bijvoorbeeld de index daarvan weten. Die array doorzoeken is veel gemakkelijker dan 1if en 11elseif's neer te zetten.


Array verandert niet, Mei blijft de key 4 houden. Dan weet je toch dat je met key 4 te maken hebt. Maar wil je toch de key weten, dan kun je inderdaad het beste array_search gebruiken.
Offline Dark_Paul - 14/02/2007 15:20 (laatste wijziging 14/02/2007 15:21)
Avatar van Dark_Paul PHP ver gevorderde @stijn1989
Die functie kan je er inderdaad voor gebruiken, maar aangezien het een statische array is, kan hij de array net zogoed andersom typen 

@random
maar daarmee los je het probleem niet op, dat je weet dat mei array key 4 heeft.. Mei was bij hem een voorbeeld, hij wil dus weten welke key bij welke maand hoord. Daar heb je dus inderdaad array_search voor..
Offline dotPixel - 14/02/2007 15:27 (laatste wijziging 14/02/2007 15:31)
Avatar van dotPixel PHP interesse Januari => 0, Februari => 1

Etc, blijft dan toch hetzelfde in die array $maanden. Je zegt zelf ook al het is een statische array (hard coded) dus dan veranderen die keys niet. Je weet dat een array bij 0 begint te tellen, je weet dat januari de eerste element in je array is: key 0, value januari.

Misschien dat ik mijn punt zo kan weergeven.
  1. <?php
  2. $array = array();
  3. $array['nick'] = 'random'; // hard coded
  4.  
  5. echo $array[array_search('random', $array)];
  6.  
  7. // maar
  8. echo $array['nick'];
  9. ?>
Offline Thomas - 14/02/2007 15:50 (laatste wijziging 14/02/2007 15:51)
Avatar van Thomas Moderator Kijk nog eens goed:
  1. <?php $maandnaam = array(1 => "Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"); ?>


De key behorend bij januari is 1, niet 0.
Dit is prima toegestaan. Mei heeft als key 5, niet 4.
Offline dotPixel - 14/02/2007 15:54 (laatste wijziging 14/02/2007 15:54)
Avatar van dotPixel PHP interesse Nou dan is 'mei' 5, dat weet je zelf dan ook wel als je je array zo opbouwt omdat het hard coded is. Als je vanuit gaat van andere codes die mensen (stijn1989) post:
  1. <?php
  2. $maandnaam = array("Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December");
  3. echo array_search('Mei' , $maandnaam);
  4. ?>


Heeft mei wel de key 4. Of het nou de key 4 of 5 heeft het blijft hard coded en het is niet variable/varierend, nogmaals het is hardcoded.

Als je eenmaal zo'n array hebt opgebouwd, dus zonder zelf keys op te geven, dan weet je toch dat januari in die array de key 0 heeft en hoef je toch niet te gaan 'zoeken' wat de key bij januari is..
Offline Dark_Paul - 14/02/2007 19:32
Avatar van Dark_Paul PHP ver gevorderde Maar de invoer (de maand) is variabel en dan moet je dus de array doorlopen om te kijken welk maandnummer er bij die maand hoort.
Anders moet je daar een if met 11elseif-s voor maken, dat probeer ik duidelijk te maken. Voorbeeld (?maand=september):
  1. <?
  2. $maanden = array('Januari' => 1, 'Februari' => 2, 'Maart' => 3, etc);
  3. if (isset($_GET['maand']) && array_key_exists($_GET['maand'], $maanden)) {
  4. echo $maanden[$_GET['maand']];
  5. }
  6. else {
  7. echo 'Ongeldige maand ingegeven!';
  8. }

Du schapscht?
Offline dotPixel - 14/02/2007 20:12
Avatar van dotPixel PHP interesse Ja, maar jij gebruikt geen array_search wat anderen wel steeds aanraadde en dat probeerde ik steeds uit te leggen. Wat jij doet is precies hetzelfde wat ik bedoelde, alleen dan de keys en values omgedraait. Persoonlijk zou ik het zo doen:

voorbeeld.php?maand=9 (september)
  1. $maanden = array('januari', 'februari', 'maart' ... 'september', 'oktober', 'november', 'december');
  2. $maand = ((isset($_GET['maand'])) && ($_GET['maand'] >= 1) && ($_GET['maand'] <= 12)) ? intval($_GET['maand']) : 1;
  3.  
  4. echo $maanden[(--$maand)] . ' met key ' . $maand;


Each to his own, zeggen we dan maar. 
Offline Thomas - 15/02/2007 09:53
Avatar van Thomas Moderator Je bedoelt wellicht "to each his own".

Het is jou wel intuitief duidelijk welk cijfer (index) bij welke naam hoort, maar als je het programma hier mee wilt laten werken zul je het ook aan het programma moeten uitleggen.

Meer in het algemeen:
Gegeven een array, en gegeven een bepaalde value, wil je weten wat de bijbehorende key is.

Meerdere manieren mogelijk:
- door te bepalen of de value bestaat: in_array
- door te bepalen of de key bestaat: array_key_exists
In beide gevallen heb je een lus nodig die wordt afgebroken op het moment dat je de value (en dus de key) vindt.

- array_flip, en kijken of $flipped_array[$value] bestaat, de waarde op deze positie is dan de key
voorwaarde hiervoor is wel dat alle values in het oorspronkelijke array uniek zijn
- array_search
Offline dotPixel - 15/02/2007 14:38
Avatar van dotPixel PHP interesse Ja precies, dat is in het algemeen. Maar hier hoef je toch niet te kijken/zoeken of 'Mei' (waarde) in je array bestaat, gezien je het er zelf hard coded heb neergezet en het niet uit een of andere bron komt en het elke waarde kan bevatten. Mijn posts beperken zich tot dit 'probleem' en niet algemeen gebruik van arrays.

Ik bedoelde inderdaad `To each his own` 
Maargoed, als het probleem van de TS maar is opgelost, dan houd ik op en blijven we allemaal bij onze standpunt.

:D
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.425s