login  Naam:   Wachtwoord: 
Registreer je!
 Forum

array key

Offline Ultimatum - 11/02/2007 22:13
Avatar van UltimatumPHP expert Ik weet niet hoe ik dit het best omschrijf maar ik heb een functie om een dropdown menu te maken. De options worden gehaald uit een array maar de array kan keys en values hebben of alleen values. Als de array uit alleen values bestaat dan moet de key gelijk zijn aan de value en anders moet de key gewoon uit de array halen. Ik heb wel de functies: array_key_exists & array_keys() gevonden maar met de eerste kijk je of de key die je zoekt bestaat en met de 2de krijg ik alle keys terug. Het is beide niet wat ik zoek.

Dit heb ik nu op het moment:
  1. <?php
  2. public function CreateSelect($name, $value, $class)
  3. {
  4. $total = count($value);
  5.  
  6. echo '<select name="'. $name .'" class="'. $class .'">';
  7.  
  8. for($i = 0; $i < $total; $i++)
  9. {
  10. echo '<option value="'. $value[$i] .'">'. ucfirst($value[$i]) .'</option>';
  11. }
  12.  
  13. echo '</select>';
  14. }
  15. ?>

7 antwoorden

Gesponsorde links
Offline Stijn - 11/02/2007 23:43 (laatste wijziging 12/02/2007 07:31)
Avatar van Stijn PHP expert zit ik te zoeken maar de oplossing ligt voor de hand gebruik foreach toch?

  1. <?php
  2. public function CreateSelect($name, $value, $class)
  3. {
  4. $total = count($value);
  5.  
  6. echo '<select name="'. $name .'" class="'. $class .'">';
  7.  
  8.  
  9. foreach( $value as $k => $v )
  10. {
  11. echo '<option value="'. ( is_integer( $k ) === true ) ? $v : $k .'">'. ucfirst($v) .'</option>';
  12. }
  13.  
  14. echo '</select>';
  15. }
  16. ?>


stijn

*edit*

dit is mijn fout die arrayHasKeys(); Ik had die functie snel geschreven tot ik besefte dat die onnodig was.

waarom is_integer?

array('stijn' , 'ibrahim'); => hij zet automatisch integer keys neer. Als je zelf keys gaat plaatsen zal dat 90% zo zijn:
array( 'naam' => array('stijn' , 'ibrahim') );
Offline Ultimatum - 12/02/2007 07:09 (laatste wijziging 12/02/2007 07:28)
Avatar van Ultimatum PHP expert Ja ik had ook aan foreach gedacht maar ik wist dus niet hoe ik dan ging kijken of er wel een key of niet aanwezig was. Maar in jou voorbeeld is de key dus altijd een integer? Denk dat het zo wel lukt. Bedankt  

Edit: waar is dit voor?
  1. $checkValue = ( arrayHasKeys( $value ) === true ) ? true : false;


want die functie arrayHasKeys heb ik niet en is dit nodig of niet?

Hmmm, hij zet al de maanden nu achter elkaar buiten de option tag..
Dus zo:
Citaat:
<select name="month" >januarifebruarimarchaprilmayjunejuliaugustseptemberoctobernovemberdecember</select>
Offline dotPixel - 12/02/2007 17:20 (laatste wijziging 12/02/2007 17:26)
Avatar van dotPixel PHP interesse Een array heeft altijd een key/sleutel. Als je geen zelf-opgegeven key geeft (meestal string), dan is het altijd een integer (tellend beginnend bij 0).

  1. <?php
  2.  
  3. $array['key'] = 'test_waarde';
  4. $array[] = 'test_Waarde_2';
  5. /**
  6.  * array(
  7.  * 'key' => 'test_waarde',
  8.  * 0 => 'test_Waarde_2'
  9.  * )
  10.  */
  11.  
  12. echo '<pre>', var_dump($array), '</pre>';
  13. ?>


At hieronder, ik begrijp je vraag niet helemaal.
De operator === kijkt ook of de data type gelijk is (dit geval boolean).
Of als je het principe niet begrijpt waarom hij kijkt of het een integer is, hij kijkt of er zelf een key is opgegeven, zoja; gebruik die zonee, gebruik dan de value.
Offline Ibrahim - 12/02/2007 17:21
Avatar van Ibrahim PHP expert waarom moet jij altijd === true/false neerzetten staan ??
Offline Stijn - 12/02/2007 17:32 (laatste wijziging 12/02/2007 17:33)
Avatar van Stijn PHP expert @random: siliecom14 wijst me daar veel op. Wanneer je die '=== true' niet opgeeft de conditie altijd vanuit gaat dat hij true moet zijn. Een voorbeeld voor de duidelijk:

  1. <?php
  2. $getal = 5;
  3.  
  4. if( is_integer( $getal ) === true ) {
  5. echo "we hebben een getal";
  6. }
  7. ?>

Volgende fragment is identiek hetzelfde:
  1. <?php
  2. $getal = 5;
  3.  
  4. if( is_integer( $getal ) ) { //hij gaat ervan uit dat hij true returnt.
  5. echo "we hebben een getal";
  6. } elseif( ! is_integer( $getal ) ) { //dit is === false dan
  7. echo "geen getal";
  8. }
  9. ?>


Ik gebruik het omdat ik dan weet dat hij een boolean moet zijn.

*edit*

@random:
Citaat:
[..code..]

die komma's moeten puntjes zijn.
Offline dotPixel - 12/02/2007 17:46 (laatste wijziging 12/02/2007 17:50)
Avatar van dotPixel PHP interesse Nee hoor, echo kan meerdere argumenten (mits je geen haakjes gebruikt, naar mijn mening ook nooit doen bij een taal constructie). Gebruik je hier de string concat (.) voor dan voert hij eerst de var_dump uit en dan krijg je <pre></pre> erachter aan, je wilt juist die var_dump() tussen de <pre> en </pre>.

;-)

In dit geval is trouwens === overbodig (== ook, maar staat wel netter), is_integer retourneert altijd een boolean, maar ieder zijn eigen codeer stijl. Zelf doe ik het ook, vind het overzichtelijker en begrijpelijker.
Offline Ultimatum - 13/02/2007 07:05
Avatar van Ultimatum PHP expert
Citaat:
Een array heeft altijd een key/sleutel. Als je geen zelf-opgegeven key geeft (meestal string), dan is het altijd een integer (tellend beginnend bij 0).


Dat is het probleem/punt helemaal niet...

Als mijn array zo is: array('januari', 'februari', 'maart'); dan moet de option zo gevuld zijn:
<option value='". $value ."'>'. $value .'</option>

Maar is de array zo: array(1=> 'januari', 'februari', 'maart'); dan moet de option zo gevuld zijn:
<option value='". $key ."'>'. $value .'</option>

Maar nu verdwijnt in iedergeval de option.. Alle values staan achter elkaar maar niet binnen de option tag
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.232s