[PHP] Checken of array met key structure of niet

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Optix
  • Registratie: Maart 2005
  • Laatst online: 12-08 19:46
Hya,

Wat ik wil doen is checken of een array een key based structure heeft of niet. Dus of het:
PHP:
1
2
3
4
$array = arary(
    'key' => 'val',
    'key2' => 'val2'
);

is, of:
PHP:
1
$array = array('val', 'val2');

is.

Nou had ik daar eerst de volgende functie voor gemaakt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function array_key_based($array) {
    $test_limit = 20;
    $key_based = false;
    $int = 0;

    foreach ($array as $key => $val) {
        $int++;

        if (!is_numeric($key)) {
            return true;
        }
        if ($int == $test_limit) {
            return false;
        }
    }
    return false;
}


Omdat een niet op key-gebaseerde-array 'eigenlijk' wel keys heeft om het te visualiseren (deze zijn numeriek) geeft die functie false terug.

Nu heb ik heel toevallig een array die alleen maar numerieke keys heeft, dus returned de functie false wat dus niet moet :)


Beetje vaag verhaal I know, zeg het maar als het niet duidelijk is. Maar ik heb hier dus een check voor nodig die dit wel kan onderscheiden.

Tnx! _/-\o_

.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Er is geen verschil tussen beiden. Arrays in php zijn geen arrays maar maps(java) of dictionaries(.net). Er is dus geen onderscheid te maken tussen arrays die eigen gedefinieerde keys hebben, of arrays die een gegenereerde key hebben.

Het enige wat je kunt doen is dus de rest van je programma aanpassen zodat hij niet meer van dit verschil afhankelijk is.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Icelus
  • Registratie: Januari 2004
  • Niet online
True/false verwisselen :?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function array_key_based($array) {
    $test_limit = 20;
    $key_based = false;
    $int = 0;

    foreach ($array as $key => $val) {
        $int++;

        if (!is_numeric($key)) {
            return false;
        }
        if ($int == $test_limit) {
            return true;
        }
    }
    return true;
}

Developer Accused Of Unreadable Code Refuses To Comment


Acties:
  • 0 Henk 'm!

  • Optix
  • Registratie: Maart 2005
  • Laatst online: 12-08 19:46
Icelus schreef op woensdag 11 juli 2007 @ 15:53:
True/false verwisselen :?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function array_key_based($array) {
    $test_limit = 20;
    $key_based = false;
    $int = 0;

    foreach ($array as $key => $val) {
        $int++;

        if (!is_numeric($key)) {
            return false;
        }
        if ($int == $test_limit) {
            return true;
        }
    }
    return true;
}
Is dat grappig bedoeld? Dan geeft ie toch false terug bij een array die wel zelf gedefinieerde keys heeft :S

.


Acties:
  • 0 Henk 'm!

  • OnTracK
  • Registratie: Oktober 2002
  • Laatst online: 15:42
Op php.net staat onder arrays :: range een comment die het best goed zou moeten doen:

PHP:
1
2
3
4
5
6
7
if (array_keys($arr)===range(0, sizeof($arr)-1)) {
// not associative array

} else {
// associative array

}

Not everybody wins, and certainly not everybody wins all the time.
But once you get into your boat, push off and tie into your shoes.
Then you have indeed won far more than those who have never tried.


Acties:
  • 0 Henk 'm!

  • Optix
  • Registratie: Maart 2005
  • Laatst online: 12-08 19:46
OnTracK schreef op woensdag 11 juli 2007 @ 15:58:
Op php.net staat onder arrays :: range een comment die het best goed zou moeten doen:

PHP:
1
2
3
4
5
6
7
if (array_keys($arr)===range(0, sizeof($arr)-1)) {
// not associative array

} else {
// associative array

}
Is indd wel een vooruitgang :)
Maar helaas nog niet helemaal waterdicht en in het geval van mijn array ziet hij er als volgt uit, dus gaat die functie nog net in de fout :( :
PHP:
1
2
3
4
5
$array = array(
    0 => 'geen',
    1 => '1 persoon',
    'etc' => 'etc'
);

[ Voor 4% gewijzigd door Optix op 11-07-2007 16:03 ]

.


Acties:
  • 0 Henk 'm!

  • Gwaihir
  • Registratie: December 2002
  • Niet online
Tja, je zou nog kunnen kijken of de numerieke keys ook nog 'ns opeenvolgend zijn. Maar eh.. 't blijft glibberig, want alle array in PHP zijn 'key-based'; PHP is slechts zo vriendelijk zelf een key voor te stellen wanneer je dat verzuimd..

Acties:
  • 0 Henk 'm!

  • Icelus
  • Registratie: Januari 2004
  • Niet online
Optix schreef op woensdag 11 juli 2007 @ 15:57:
[...]


Is dat grappig bedoeld? Dan geeft ie toch false terug bij een array die wel zelf gedefinieerde keys heeft :S
Zit inderdaad verkeert te denken...

Developer Accused Of Unreadable Code Refuses To Comment


Acties:
  • 0 Henk 'm!

  • Optix
  • Registratie: Maart 2005
  • Laatst online: 12-08 19:46
Gwaihir schreef op woensdag 11 juli 2007 @ 16:03:
Tja, je zou nog kunnen kijken of de numerieke keys ook nog 'ns opeenvolgend zijn. Maar eh.. 't blijft glibberig, want alle array in PHP zijn 'key-based'; PHP is slechts zo vriendelijk zelf een key voor te stellen wanneer je dat verzuimd..
check mijn post :)
In mijn array zijn de keys reeks opeenvolgende nummerieke getallen, dat is het vervelende.

.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Gwaihir schreef op woensdag 11 juli 2007 @ 16:03:
Tja, je zou nog kunnen kijken of de numerieke keys ook nog 'ns opeenvolgend zijn. Maar eh.. 't blijft glibberig, want alle array in PHP zijn 'key-based'; PHP is slechts zo vriendelijk zelf een key voor te stellen wanneer je dat verzuimd..
Kijken of alles numeriek en opvolgend is is ongeveer wat de door OnTrack geposte code doet, en ik denk dat die code eigenlijk de enige is die nog een beetje in de buurt komt (mits er geen items verwijderd worden).

[ Voor 12% gewijzigd door Janoz op 11-07-2007 16:06 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Optix
  • Registratie: Maart 2005
  • Laatst online: 12-08 19:46
Ik vrees toch dat ik een letter ervoor moet gaan zetten en die er later weer uit moet gaan strippen tenzij er nog iemand komt met een oplossing :)

.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Wat is het probleem met de code van OnTrack? Die geeft toch keurig aan dat het de door jouw geposte array een associative array is? Dat het dus een 'op key's gebaseerde' array is?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Optix
  • Registratie: Maart 2005
  • Laatst online: 12-08 19:46
Nee, want mijn array ziet er als volgt uit:
PHP:
1
2
3
4
5
$array = array(
    0 => 'geen',
    1 => '1 persoon',
    2 => '2 personen'
);


Dus oplopend, nummeriek en de laatste key is ook de lengte van de array ( -1 :) )

[ Voor 4% gewijzigd door Optix op 11-07-2007 16:17 ]

.


Acties:
  • 0 Henk 'm!

  • Mithrandir
  • Registratie: Januari 2001
  • Laatst online: 09:19
Maar dan IS er geen verschil!

PHP:
1
2
3
4
5
$array = array( 
    0 => 'geen', 
    1 => '1 persoon', 
    2 => '2 personen' 
);


is PRECIES hetzelfde als

PHP:
1
$array = array('geen', '1 persoon', '2 personen');


Dus wat is nu werkelijk het probleem? Waarom wil je dit?

Verbouwing


Acties:
  • 0 Henk 'm!

  • Swaptor
  • Registratie: Mei 2003
  • Laatst online: 17-06 07:31

Swaptor

Java Apprentice

Wat Mithrandir zegt, het verschil had alleen aanwezig geweest wanneer de key's niet continu oplopend vanaf 0 waren geweest.

Ontdek mij!
Proud NGS member
Stats-mod & forum-dude


Acties:
  • 0 Henk 'm!

  • Optix
  • Registratie: Maart 2005
  • Laatst online: 12-08 19:46
Mithrandir schreef op woensdag 11 juli 2007 @ 16:21:
Maar dan IS er geen verschil!

PHP:
1
2
3
4
5
$array = array( 
    0 => 'geen', 
    1 => '1 persoon', 
    2 => '2 personen' 
);


is PRECIES hetzelfde als

PHP:
1
$array = array('geen', '1 persoon', '2 personen');


Dus wat is nu werkelijk het probleem? Waarom wil je dit?
Deze arrays worden door een gebruiker gegenereerd en zitten niet statisch in de code. De array waardes zijn options in een selectbox waar gekozen kan worden om keys en values in te vullen of alleen maar de values, dan worden de values gekopieerd naar de keys.

Maar stel dat een gebruiker nou besluit om een selectbox te maken waarin moet worden gekozen met hoeveel personen je op reis gaat en daar rolt de (in voorbeeld gegeven) array uit dan zullen van de keys worden gemaakt 'geen', '1 persoon', '2 personen'.

En dat is dus niet de bedoeling, er moet dan gezien worden dat die keys 0,1,2 door de gebruiker zijn ingevoegd en niet door php 'gegenereerd' zijn.

.


Acties:
  • 0 Henk 'm!

  • wackmaniac
  • Registratie: Februari 2004
  • Laatst online: 19-09 18:02
Het is bij mijn weten onmogelijk om te bepalen of een of andere user
PHP:
1
$foo = array( 'a' , 'b' , 'c' );

of
PHP:
1
$foo = array( 0 => 'a' , 1 => 'b' , 2 => 'c' );

heeft gedaan. Je zal dus echt iets anders moeten verzinnen.

Read the code, write the code, be the code!


Acties:
  • 0 Henk 'm!

  • Johnny
  • Registratie: December 2001
  • Laatst online: 14:39

Johnny

ondergewaardeerde internetguru

HTML:
1
2
3
4
5
<select>
<option value="0">geen</option>
<option value="1">1 persoon</option>
<option value="2">2 personen</option>
</select>

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Acties:
  • 0 Henk 'm!

  • Gwaihir
  • Registratie: December 2002
  • Niet online
Die er nog niet stond..
Janoz schreef op woensdag 11 juli 2007 @ 16:05:
[...]

Kijken of alles numeriek en opvolgend is is ongeveer wat de door OnTrack geposte code doet, en ik denk dat die code eigenlijk de enige is die nog een beetje in de buurt komt (mits er geen items verwijderd worden).
Is toch precies wat ik zeg?

Kom op jongens, is dit forum gericht op mensen die nimmer langer dan 30 seconden voor een reactie nemen of zo? |:( Zie Icelus' en Johnny's posts voor hoe lekker dat bijdraagt..
Optix schreef op woensdag 11 juli 2007 @ 16:56:
[...]

Maar stel dat een gebruiker nou besluit om een selectbox te maken waarin moet worden gekozen met hoeveel personen je op reis gaat en daar rolt de (in voorbeeld gegeven) array uit dan zullen van de keys worden gemaakt 'geen', '1 persoon', '2 personen'.
Hoe / waar rolt dat array er dan uit? Daar moet je zijn met onderscheid maken :).

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Optix schreef op woensdag 11 juli 2007 @ 16:56:
En dat is dus niet de bedoeling, er moet dan gezien worden dat die keys 0,1,2 door de gebruiker zijn ingevoegd en niet door php 'gegenereerd' zijn.
Op het ene moment wil je synthetische keys, een nummering die automatisch is aangemaakt, maar geen echte betekenis (berust op volgorde/toeval), op het andere moment wil je keys die wil een betekenis hebben. Je feature lijkt leuk, maar imo is het een slecht plan.

Óf je de detecteert hoe het ingevoerd is, óf je laat de gebruiker instellen of hij zelf sleutels wil bepalen, óf jij maakt die keuze. De waarde van zo'n key boeit gewoon helemaal niet, als hij maar niet zomaar veranderd. Zie datamodel discussies voor alle argumenten voor/tegen synthetische keys.

{signature}


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Gwaihir schreef op woensdag 11 juli 2007 @ 22:26:

Is toch precies wat ik zeg?

Kom op jongens, is dit forum gericht op mensen die nimmer langer dan 30 seconden voor een reactie nemen of zo? |:( Zie Icelus' en Johnny's posts voor hoe lekker dat bijdraagt..
Ja, en precies wat jij zegt heeft OnTrack dus al gemeld. Ik geef alleen maar aan dat hetgeen je meld eerder ook al gepost was.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Optix
  • Registratie: Maart 2005
  • Laatst online: 12-08 19:46
OnTrack heeft indd een functie gepost die 9 van de 10 keer goed werkt, maar ik loop net tegen die ene keer aan dat het fout gaat.

Ik heb het maar (om wel 100% zeker te zijn) opgelost door (als gebruiker zelf keys opgeeft) hier 2 underscores voor te zetten. Zo word de key een string en is er dus onderscheidt tussen een door php gegenereerde (numerieke) key en een zelf gedefenieerde key (string) en kan ik dus kijken of de keys strings zijn of niet.

Later strip ik die 2 underscores er wel weer uit.

Tnx voor al de replies :)

.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Mwah, ik schaar me eerder achter Voutloos. Je bent een probleem op de verkeerde plek aan het oplossen. Je zou niet je code aan moeten passen, maar je ontwerp. Dat is namelijk hetgeen aan het rammelen is.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Optix
  • Registratie: Maart 2005
  • Laatst online: 12-08 19:46
Ok, graag je mening dan over het volgende:
Ik heb namenlijk het volgende als je een select box wil aanmaken:
PHP:
1
2
3
4
$options_1 = array('eerste iets', 'tweede iets', 'derde iets');
$options_2 = array('eerste waarde' => 'eerste iets', 'tweede waarde' => 'tweede iets', 'derde waarde' => 'derde iets');

$form->addElement('select', array('name' => 'select_ding', 'etc' => 'etc'), $options_X);


Ik wil dus dat het met beide arrays werkt.
Een select option heeft een value en een 'label'
Bij de eerste options array zou het er zo uit komen te zien:

HTML:
1
2
3
    <option value="eerste iets">eerste iets</option>
    <option value="tweede iets">tweede iets</option>
    <option value="derde iets">derde iets</option>


En bij de tweede array

HTML:
1
2
3
    <option value="eerste waarde">eerste iets</option>
    <option value="tweede waarde">tweede iets</option>
    <option value="derde waarde">derde iets</option>


Graag jullie visie hier dan op :)

.


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Je kunt toch een flag opnemen voor in je addElement functie, even aangenomen dat je met het tweede array de tweede functie-parameter opties over je select mee de functie in stuurt zoiets:
PHP:
1
2
$form->addElement('select', array('assoc'=>FALSE,'name' => 'select_ding', 'etc' => 'etc'), $options_1);
$form->addElement('select', array('assoc'=>TRUE,'name' => 'select_ding', 'etc' => 'etc'), $options_2);

[ Voor 4% gewijzigd door T-MOB op 12-07-2007 13:30 ]

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • Optix
  • Registratie: Maart 2005
  • Laatst online: 12-08 19:46
T-MOB schreef op donderdag 12 juli 2007 @ 13:30:
Je kunt toch een flag opnemen voor in je addElement functie, even aangenomen dat je met het tweede array de tweede functie-parameter opties over je select mee de functie in stuurt zoiets:
PHP:
1
2
$form->addElement('select', array('assoc'=>FALSE,'name' => 'select_ding', 'etc' => 'etc'), $options_1);
$form->addElement('select', array('assoc'=>TRUE,'name' => 'select_ding', 'etc' => 'etc'), $options_2);
Klopt, de tweede parameter is indd voor de options.

Verder vind ik het erg vies om dat te moeten opgeven.

.


Acties:
  • 0 Henk 'm!

Verwijderd

Ik zou het persoonlijk zo oplossen: je gebruikt altijd de keys van de opgegeven array als waarden. Of deze nou wel of niet door de user bepaald zijn, dan is aan hem/haar!
Oftewel, de navolgende input:

PHP:
1
$options = array('een','twee','drie');


...heeft als resultaat:

HTML:
1
2
3
<option value="0">een</option>
<option value="1">twee</option>
<option value="2">drie</option>


En deze input:

PHP:
1
$options = array(1=>'een',2=>'twee',3=>'drie');


...heeft als resultaat:

HTML:
1
2
3
<option value="1">een</option>
<option value="2">twee</option>
<option value="3">drie</option>


Oftewel, maak het resultaat eenduidig en ga niet `slim` lopen doen. Op deze manier, zoals hierboven omschreven dus, laat je de keuze aan de gebruiker. Geen keys opgegeven? Prima, gebruiken we de keys die PHP zelf genereerd. Wel keys opgegeven? Prima, gebruiker we die.

Dat is naar mijn bescheiden mening de methode die je zou moeten gebruiken.
Iemand die arrays kan definieren, kan ook eventueel bijbehorende keys definieren. Ik zou niet inzien waarom je niet met deze methode gaat werken?

Edit: Ik zag ergens een suggestie over het gebruik van een extra flag in de method addElement(). Dit werd vervolgens afgewezen omdat het gebruik ervan extra moeite zou zijn voor de gebruiker. De voor de hand liggende oplossing is om er een optionele parameter van te maken.
Dus stel dat de functie normaliter vier parameters verwacht, kun je bij de definitie aangeven dat er een optionele vijfde gebruikt kan worden waarmee aangegeven kan worden dat de waarden van de arrays tevens als keys gebruikt moeten worden:

PHP:
1
2
3
4
5
function addElement($een, $twee, $drie, $vier, $vijf=false) {
    if($vijf) {
        // gebruik de waarden van de input array tevens als keys
    }
}


Dus een function-call als de navolgende:

PHP:
1
2
3
$options = array('een','twee');
$vijf = true;
addElement($options, 'etc.', $vijf) { }


... heeft als resultaat:

HTML:
1
2
<option value="een">een</option>
<option value="twee">twee</option>


Als de functie aangeroepen wordt zonder de optionele vijfde parameter heb je dus als resultaat:

HTML:
1
2
<option value="0">een</option>
<option value="1">twee</option>


Kortom; een volledige en complete oplossing waarbij je de gebruiker alle mogelijkheden biedt. En daar streven we naar, me dunkt ;)

[ Voor 41% gewijzigd door Verwijderd op 12-07-2007 15:28 ]


Acties:
  • 0 Henk 'm!

  • Optix
  • Registratie: Maart 2005
  • Laatst online: 12-08 19:46
Omdat,
Ik neem een voorbeeld.

- Gebruiker maakt een select element aan, bijvoorbeeld:
"selecteerd je favoriete huisdier"

- Gebruiker maakt de volgende opties:
* hond
* kat
* muis

Volgens jouw methode word dan de volgende html uitgespuugd:
HTML:
1
2
3
    <option value="1">hond</option> 
    <option value="2">kat</option> 
    <option value="3">muis</option>


Dus dan heb je (als eenmaal formulier klaar is en iemand vult het in) in je database een veld met favoriete_huisdier met een waarde van 2

Daar kan je dus helemaal niks mee :)


(EDIT)

Verder, heb het nog anders opgelost, om een select element te maken word dat nu:
PHP:
1
2
3
$form->addOption('Een lief muisje', 'muis');
$form->addOption('Een hondje', 'hond');
$form->addElement('select', array('name' => 'favo_huisdier'));


addOption kijkt meteen of de 2e parameter is ingevuld, en zo niet word als de 2e parameter de 1e gebruikt en zo de array gevuld.

Eenmaal het select element met addElement gemaakt, word de array weer leeggegooid. Moet zeggen dat ik dit wel fijn vind werken.

[ Voor 31% gewijzigd door Optix op 12-07-2007 15:38 ]

.


Acties:
  • 0 Henk 'm!

Verwijderd

Optix schreef op donderdag 12 juli 2007 @ 15:29:
Omdat,
Ik neem een voorbeeld.

- Gebruiker maakt een select element aan, bijvoorbeeld:
"selecteerd je favoriete huisdier"

- Gebruiker maakt de volgende opties:
* hond
* kat
* muis

Volgens jouw methode word dan de volgende html uitgespuugd:
HTML:
1
2
3
    <option value="1">hond</option> 
    <option value="2">kat</option> 
    <option value="3">muis</option>


Dus dan heb je (als eenmaal formulier klaar is en iemand vult het in) in je database een veld met favoriete_huisdier met een waarde van 2

Daar kan je dus helemaal niks mee :)
Dat is de keuze van de persoon die het select-element aangemaakt heeft! Ik heb mijn post her en der wat aangepast, ik zou zeggen lees hem nog eens door. Volgens mij is de oplossing, inclusief de edit, compleet en als je dat wilt tegenspreken, ontvang ik graag de argumenten :)

NOFI

Acties:
  • 0 Henk 'm!

  • Optix
  • Registratie: Maart 2005
  • Laatst online: 12-08 19:46
Ref: edit :P

.


Acties:
  • 0 Henk 'm!

  • Mister_X
  • Registratie: Februari 2000
  • Laatst online: 17-04 14:07
Optix schreef op donderdag 12 juli 2007 @ 15:29:
Omdat,
Ik neem een voorbeeld.

- Gebruiker maakt een select element aan, bijvoorbeeld:
"selecteerd je favoriete huisdier"

- Gebruiker maakt de volgende opties:
* hond
* kat
* muis

Volgens jouw methode word dan de volgende html uitgespuugd:
HTML:
1
2
3
    <option value="1">hond</option> 
    <option value="2">kat</option> 
    <option value="3">muis</option>


Dus dan heb je (als eenmaal formulier klaar is en iemand vult het in) in je database een veld met favoriete_huisdier met een waarde van 2

Daar kan je dus helemaal niks mee :)


(EDIT)

Verder, heb het nog anders opgelost, om een select element te maken word dat nu:
PHP:
1
2
3
$form->addOption('Een lief muisje', 'muis');
$form->addOption('Een hondje', 'hond');
$form->addElement('select', array('name' => 'favo_huisdier'));


addOption kijkt meteen of de 2e parameter is ingevuld, en zo niet word als de 2e parameter de 1e gebruikt en zo de array gevuld.

Eenmaal het select element met addElement gemaakt, word de array weer leeggegooid. Moet zeggen dat ik dit wel fijn vind werken.
Ah ,een formgeneratortje, misschien is dit een betere oplossing:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class select extends formElements
{
    function display($properties)
    {
        if(is_array($properties->options))
        {
            foreach($properties->options as $array)
            {
                if(is_array($array) && !empty($properties->key) && !empty($properties->field))
                {
                    $value = $array[$properties->key];
                    $field = $array[$properties->field];
                }
                else
                {
                    $field = $array;
                    $value = $array;
                }
                $selected = ($value == $this->value || $_GET[$properties->key] == $value) ? "selected":"";
                $output .= "<option {$selected} value=\"{$value}\">{$field}</option>";
            }
        }
        else
        {
            $output .= "<option>empty...</option>";
        }
        return("<select name=\"{$this->property}\" id=\"{$this->property}\"><option></option>{$output}</select>");
    }
}

dit clasjes is onderdeel van andere class, aanroepen:

PHP:
1
2
3
4
$editor->address_id = new select("address",$this->address_id); //label, value
$editor->address_id->options = $object->find($_GET); //opties is gewoon een recordset / array, $_GET kan als filter dienen
$editor->address_id->field = $object->objectInfo['CHAR']; //zou str_address moeten zijn in dit geval
$editor->address_id->key = $object->objectInfo['PRI']; //zou address_id moeten zijn.


PHP:
1
2
3
$form->addOption('Een lief muisje', 'muis');
$form->addOption('Een hondje', 'hond');
$form->addElement('select', array('name' => 'favo_huisdier'));

word dan:
PHP:
1
2
3
4
$editor->favo_huisdier = new select('Favo huisdier',$value);
$editor->favo_huisdier->options = array(array("key"=>"muis","field"=>"Een lief muisje"),array("key"=>"hond","field"=>"een lief hondje"));
$editor->favo_huisdier->key = "key";
$editor->favo_huisdier->field = "field";

vergeet niet dat mijnes gemaakt is voor recordset of gewoon array("fieldvalue","fieldvalue") arrays!

[ Voor 10% gewijzigd door Mister_X op 12-07-2007 15:47 ]


Acties:
  • 0 Henk 'm!

Verwijderd

/me kruipt weer stilletjes in zijn bunker en vindt nog steeds dat zijn oplossing de betere is...

:) Succes in ieder geval!

[ Voor 15% gewijzigd door Verwijderd op 12-07-2007 15:43 ]


Acties:
  • 0 Henk 'm!

  • Mister_X
  • Registratie: Februari 2000
  • Laatst online: 17-04 14:07
Verwijderd schreef op donderdag 12 juli 2007 @ 15:42:
[...]


[...]


/me kruipt weer stilletjes in zijn bunker en vindt nog steeds dat zijn oplossing de betere is...

:) Succes in ieder geval!
haha. ja in ZIJN geval is jouwes beter, maar mijn formgenerator is onderdeel van een database framework, dus is gericht op op recordsets, maaaaar, als je hem beetje modificeerd werkt het ook wel op de key => value methode hoor!

Acties:
  • 0 Henk 'm!

  • Optix
  • Registratie: Maart 2005
  • Laatst online: 12-08 19:46
Mister_X schreef op donderdag 12 juli 2007 @ 15:48:
ja in ZIJN geval is jouwes beter.
Onderbouw dat eens :)

.


Acties:
  • 0 Henk 'm!

  • Mister_X
  • Registratie: Februari 2000
  • Laatst online: 17-04 14:07
bij hem kan je array("dit is de value"=>"dit zie je in je dropdown") doen

bij mij is een recordset beter, tenzij je dat classje verbouwd.

Acties:
  • 0 Henk 'm!

  • Gwaihir
  • Registratie: December 2002
  • Niet online
Janoz schreef op donderdag 12 juli 2007 @ 08:45:
[...]

Ja, en precies wat jij zegt heeft OnTrack dus al gemeld. Ik geef alleen maar aan dat hetgeen je meld eerder ook al gepost was.
Tja, als het zo moet |:(.

Janoz, ik spreek je hier nu nadrukkelijk op aan daar je moderator van dit forum bent en je sfeer verziekend handelen daar naar mijn mening nou niet bepaald bij hoort. Ik vind het onaangenaam en ongepast dat je een simpel dubbelposten aangrijpt om een beetje te gaan zitten schamperen over mijn bijdrage, temeer daar die inhoudelijk volledig spot on was. Dergelijke reacties zijn een moderator onwaardig; ze zijn overbodig en betweterig en zetten er toe aan dat eenieder die fatsoenlijk over z'n bijdrage zou nadenken dit board maar mijdt.

Ik heb je attent gemaakt op wat je zelf als regelmatig forum gebruiker ook had behoren in te zien: dat die post niet tijden EERDER al aanwezig was, doch dat ze naar menselijke maatstaf GELIJKTIJDIG zijn gemaakt. Dit is een doodnormaal verschijnsel op een forum en m.i. geen aanleiding tot bijdehand gedrag. Ik betreur het zeer te zien dat het niet heeft geholpen je daar met een kwinkslag op te attenderen. Ik had geen excuus verwacht of zo, maar je stompzinnige insteek in reactie gewoon nog maar een keertje te posten gaat mij te ver.
Pagina: 1