Beste mensen.

Ik heb stuk of zeven arrays met custom keys.

Nu is mijn vraag: hoe kan ik simpel al die verschillende array items op eenzelfde statement controleren?

Ik zie voorlopig alleen de oplossing om voor iedere variabele apart if-else conditions te schrijven.

Een klein voorbeeldje:

$generalSettings = array(
    "lights" = $_POST['generalLights'],
    "tones" = $_POST['generalTones']
);

if($generalSettings['lights'] == 1) {
    $generalSettings['lights'] = 1;
} else {
    $generalSettings = 0;
}
if($generalSettings['tones'] == 1) {
    $generalSettings['tones'] = 1;
} else {
    $generalSettings['tones'] = 0;
}


Bestaat er een simpelere manier?

Alvast bedankt voor het antwoord.

Groetjes, Jordy.
Thomas van den Heuvel op 12/07/2017 14:58:41

Omdat het een formulier betreft ($_POST): zou dit geen onderdeel moeten zijn van de validatie van (gegevens uit) het formulier? Of is dat juist wat je hier aan het doen bent?

Mogelijk kun je dit probleem dus op een andere plaats, en op een elegantere manier, oplossen.


Dat is precies wat ik aan het doen ben: formuliervalidatie...

Hoe zou ik het eleganter kunnen doen?

[size=xsmall]Toevoeging op 12/07/2017 15:07:56:[/size]

Ben van Velzen op 12/07/2017 14:43:14

Dat zou je eventueel kunnen doen, maar waarom zou je 7 van deze variabelen hebben? Je zou er ook een functie van kunnen maken met een by reference argument. Whatever floats your boat.


Oeps, dit wordt een beetje te nieuw...

Wat is een "by reference argument"?
Ik heb er zeven (ondertussen 8), omdat er 8 verschillende secties in het formulier zitten.

Als alles naar wens verloopt, moet er een bepaalde output gegenereerd worden, die er ongeveer zo uit kan zien:


[general]
bold = 1
italic = 0
underlined = 1

[winword]
invalid-spelling = 1
bold = 1
italic = 1
underlined = 1
strikethrough = 1
(En zo verder natuurlijk, tot zeven secties bereikt zijn; die achtste zijn instellingen voor het script zelf.)

Waarom maak je er dan niet gewoon een multidimensionale array van? Voor de eerste optie zou je dan iets krijgen als $settings['general']['bold']. Dan kun je daarna gewoon met een dubbele foreach er doorheen fietsen:
<?php
foreach ($settings as $setting) {
foreach ($setting as $key => $value) {
if ($value != 1) {
$settings[$setting][$key] = 0;
}
}
}
?>
Oké, dat ga ik eens uitproberen! zo veel aanpassingswerk is dat niet :)
Als het om standaardinstellingen gaat, zou ik éérst die standaard formaliseren door de arrays te definiëren en vervolgens uitsluitend de uitzonderingen op de standaard afhandelen.

Reageren