Verschillende variabelen controleren op één statement

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jordy Deweer

Jordy Deweer

12/07/2017 11:36:39
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$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.
 
PHP hulp

PHP hulp

05/05/2024 23:40:30
 
- SanThe -

- SanThe -

12/07/2017 12:06:12
Quote Anchor link
Sowieso zinloos om er 1 in te zetten als je zeker weet dat dat er reeds in zit.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
if($generalSettings['lights'] != 1) {
    $generalSettings = 0;
}

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

?>
 
Jordy Deweer

Jordy Deweer

12/07/2017 12:13:08
Quote Anchor link
- SanThe - op 12/07/2017 12:06:12:
Sowieso zinloos om er 1 in te zetten als je zeker weet dat dat er reeds in zit.

Ik ben niet zeker dat 1 in alle velden zit.
Het zijn selectievakjes met value 1, maar als die niet aangevinkt worden, dan hebben die toch geen waarde?
of hoe zit dat dan?
 
- SanThe -

- SanThe -

12/07/2017 12:16:54
Quote Anchor link
Ik bedoel dat dit niet hoeft:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if($generalSettings['lights'] == 1) {
    $generalSettings['lights'] = 1;
}

?>

Want nu zit er al 1 in.
Dus dit kan je overslaan en alleen indien er geen 1 in zit op 0 zetten.
 
Jordy Deweer

Jordy Deweer

12/07/2017 12:25:50
Quote Anchor link
Ooooh, zo. Ja, slim, bedankt! Dat scheelt veel typewerk.
Bestaat er een manier dit nog simpeler te doen?
 
Elwin - Fratsloos

Elwin - Fratsloos

12/07/2017 12:50:53
Quote Anchor link
Je kan het met een array doen met de keys van $generalSettings en dan in een for-loop vergelijken:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$generalSettings
= array(
    "lights" => $_POST['generalLights'], // Let op! Je had = staan, maar dat moet => zijn.
    "tones" => $_POST['generalTones']
);


$keys = array_keys($generalSettings);

foreach($keys as $key) {
    if($generalSettings[$key] != 1) $generalSettings[$key] = 0;
}


var_dump($generalSettings);
?>
 
Jordy Deweer

Jordy Deweer

12/07/2017 13:07:46
Quote Anchor link
Kan het ook zo (oplossing van StackOverflow):

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
// gebruik de array van hierboven
foreach($generalSettings as $key=>$value) {
    if($value != 1) [
        $generalSettings[$key] = 0;
    }
}

Of is dat een slecht idee, en waarom?

(Ik wil bijleren van mijn vragen, daarom vraag ik ook de reden...)

Groetjes

Toevoeging op 12/07/2017 13:08:58:

en dan nog wat over de code die gedeeld werd: hoe komt het dat bij jullie sommige functies een link zijn en bij mij niet?
 
Ben van Velzen

Ben van Velzen

12/07/2017 13:32:35
Quote Anchor link
Die oplossing is feitelijk beter.
Als je highlighting etc wilt moet je de php open en sluit tags om je code zetten (zie de code van anderen).
 
Jordy Deweer

Jordy Deweer

12/07/2017 14:10:40
Quote Anchor link
Ok, en kan ik die foreach functie ook in een andere foreach functie steken, zodat ik geen zeven aparte foreach functies moet schrijven? Zo ja, hoe ongeveer?
 
Ben van Velzen

Ben van Velzen

12/07/2017 14:43:14
Quote Anchor link
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.
Gewijzigd op 12/07/2017 14:44:46 door Ben van Velzen
 
Thomas van den Heuvel

Thomas van den Heuvel

12/07/2017 14:58:41
Quote Anchor link
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.
 
Jordy Deweer

Jordy Deweer

12/07/2017 15:03:40
Quote Anchor link
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?

Toevoeging op 12/07/2017 15:07:56:

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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
[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.)
 
Ben van Velzen

Ben van Velzen

12/07/2017 15:17:19
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
foreach ($settings as $setting) {
  foreach ($setting as $key => $value) {
    if ($value != 1) {
      $settings[$setting][$key] = 0;
    }
  }
}

?>
Gewijzigd op 12/07/2017 15:17:50 door Ben van Velzen
 
Jordy Deweer

Jordy Deweer

12/07/2017 15:23:05
Quote Anchor link
Oké, dat ga ik eens uitproberen! zo veel aanpassingswerk is dat niet :)
 
Ward van der Put
Moderator

Ward van der Put

12/07/2017 15:23:51
Quote Anchor link
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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.