[PHP] multiple if functie!

Gestart doorDylan3 reacties70 weergaven

4 berichten · pagina 1 van 1

Dylan

Lid · Topicstarter

Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Na aanleiding van deze post heb ik een functie gemaakt waarmee je meerde values kan controlleren met 1 expressie! Verdere info staat in het script:

Codeblok (voorbeeld.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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155



/* Gebruik:
if(mif(waardes, expressie))

let op: gebruik als expressie niet dit:
=== 3.5
maar
===3.5

het is automatisch een string, behalve:
true of false => boolean (let op: 0 en 1 zou die herkennen als een int!!!)
null => null
3 => int
3.5 => float

al het andere is een string dus je hoeft geen quotes te gebruiken:
if(mif(lennard, ===lennard)) => true
if(mif(lennard, ==="lennard")) => false

nog een laaste voorbeeld:

if(mif(lennard, 15, abc, jelleh, !== false)) betekend dus:

is lennard, 15, abc, jelleh niet gelijk aan false? => Ja!

*/

function mif() {
$arguments = func_get_args();
$operators = array("==", "===", "!=", "<>", "!==", "<", "<=", ">", "=>");
$expressie = NULL;
$output = NULL;

foreach ($operators as $op) { /* Zoek de expressie */
$i = 0;
foreach ($arguments as $arg) {
if(substr($arg, 0, strlen($op)) == $op && $expressie === NULL) {
$expressie = array();
$expressie[0] = substr($arg, 0, strlen($op)+1);
$expressie[1] = substr($arg, strlen($op)+1);

/*
De waarde (expressie[1]) omzetten naar de correcte data type
Boolean, integer, float, null of anders is het een string
*/

switch (trim($expressie[1])) {
case
"false":
case
"true":
settype($expressie[1], "boolean");
break;
case
"null":
settype($expressie[1], "null");
break;
default:

if(is_numeric(trim($expressie[1])) && strpos(trim($expressie[1]), ".") === FALSE) {
settype($expressie[1], "integer");
}
elseif(is_numeric(trim($expressie[1])) && strpos(trim($expressie[1]), ".") !== FALSE) {
settype($expressie[1], "float");
}
else {
settype($expressie[1], "string"); /* Het is al een string, maar just to be sure */
}
break;
}


unset($arguments[$i]);
}

$i++;
}
}


foreach ($arguments as $arg) {
switch ($expressie[0]) {
case
"==":
if($arg == $expressie[1] && $output !== FALSE) {
$output = TRUE;
}
else {
$output = FALSE;
}

break;
case
"===":
if($arg === $expressie[1] && $output !== FALSE) {
$output = TRUE;
}
else {
$output = FALSE;
}

break;
case
"!=":
if($arg != $expressie[1] && $output !== FALSE) {
$output = TRUE;
}
else {
$output = FALSE;
}

break;
case
"<>":
if($arg <> $expressie[1] && $output !== FALSE) {
$output = TRUE;
}
else {
$output = FALSE;
}

break;
case
"!==":
if($arg !== $expressie[1] && $output !== FALSE) {
$output = TRUE;
}
else {
$output = FALSE;
}

break;
case
"<":
if($arg < $expressie[1] && $output !== FALSE) {
$output = TRUE;
}
else {
$output = FALSE;
}

break;
case
"<=":
if($arg <= $expressie[1] && $output !== FALSE) {
$output = TRUE;
}
else {
$output = FALSE;
}

break;
case
">=":
if($arg >= $expressie[1] && $output !== FALSE) {
$output = TRUE;
}
else {
$output = FALSE;
}

break;
case
">":
if($arg > $expressie[1] && $output !== FALSE) {
$output = TRUE;
}
else {
$output = FALSE;
}

break;
default:

$output = FALSE;
break;
}
}


return $output;
}


$a = 3.5;
$b = 3.5;
$c = 3.5;

/* Is $a, $b en $c gelijk aan 3.5? */
if(mif($a, $b, $c, "===3.5")) {
echo "JA";
}
else {
echo "nee";
}

?>

Als er nog bugs zijn wil je dat dan melden? pompom En feedback is ook welkom


Achteraf blijkt er nog een aantal bugs in te zitten die ik nog moet fixen
0
Berichten
13.482
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Waarom doe je op de plaatsen waar je $output = FALSE; doet niet gewoon meteen een return false; ? Hierna worden ze toch niet meer veranderd, dus vervolgens voor alle andere argumenten checken of het daar wel voldoet, heeft geen zin..

Verder snap ik niet waarom je deze code zou gebruiken, lijkt me echt in iedere situatie overbodig emo
toevoeging op 1 juli 2014, 16:05:12:
Wat als je bijvoorbeeld op de string "true" wilt checken ipv de boolean true ?
0
Dylan

Lid · Topicstarter

Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Sjoerd schreef:
Waarom doe je op de plaatsen waar je $output = FALSE; doet niet gewoon meteen een return false; ? Hierna worden ze toch niet meer veranderd, dus vervolgens voor alle andere argumenten checken of het daar wel voldoet, heeft geen zin..

Verder snap ik niet waarom je deze code zou gebruiken, lijkt me echt in iedere situatie overbodig emo
toevoeging op 1 juli 2014, 16:05:12:
Wat als je bijvoorbeeld op de string "true" wilt checken ipv de boolean true ?

Ja, oke dat kan ik nog veranderen.
---
Ik heb soms situatie`s waar ik een var met dezelfde waarde als andere var moet controleren
---
Hmm, ja. Dit kan nog opgelost worden door ook de types van de argumenten aan te passen
0
Berichten
6.485
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Wat ik vaak nog in zulke situaties gebruik is in_array()

Sowieso zijn arrays makkelijk, als je meerdere variablen op dezelfde functie moet testen kan dat heel makkelijk met array_map();
0

Jouw reactie

Deel je idee, stel een vraag of help een ander verder.

Editor laden…

Praat mee met de One2xs-community.

Inloggen om te reageren