modus
Syntax:
mixed modus(mixed $var1 [, mixed $var2 [, mixed $var3...]];
Er is een optionele argument, SORT_ASC (momenteel nog wel!) die ipv één waarde een ARRAY teruggeeft met daarbij het aantal keer dat de modulus voorkomt.
Hoe doe je dat?
$array = array(1, 2, 3, 3, 3, 3, 4, 5);
print_r(modus($array)); // geeft 3, want die komt het meeste voor
print_r(modus($array, SORT_ASC)); // geeft array terug: [0] is 3 en [1] is 4
Dat ik SORT_ASC gebruik is toevallig, anders krijg ik een notice!
De code is aan het begin vrijwel gelijk aan average(), behalve dat er nu niet naar gekeken wordt of het numeriek is.
En uiteindelijk de code:
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
// function modus()
function modus()
{
// variabelen instellen
$waarden = array();
$modus = false;
$modus_array = array();
$prefix = "~~~";
// alle argumenten die opgegeven zijn tot 1 array combineren
$argumenten = func_get_args();
// alle argumenten aflopen
foreach($argumenten as $argument)
{
// als het opgegeven argument een array is
if(is_array($argument))
{
$array = $argument;
foreach($array as $value)
{
$waarden[] = $prefix . $value;
}
unset($array);
}
else
{
$waarden[] = strval($prefix . $argument);
}
}
// controleer op er een array is gegeven
if(count($waarden) == 0)
{
return false;
}
// alle getallen aflopen en deze nummer
$array_modus = array_count_values($waarden);
// sort getallen
array_multisort($array_modus, SORT_DESC, SORT_REGULAR);
// geeft de key van de eerste waarde(dus die het vaakst voorkomt) terug
$modus = key($array_modus);
$modus_count = current($array_modulus);
// verwijder de $prefix weer
$modus = substr($modulus, strlen($prefix));
// kijk wat gereturnd moet worden
if(array_search(SORT_ASC, $argumenten) !== false)
{
// array teruggeven:
return array($modus, $modus_count);
}
// returnd uiteindelijk de modus weer
return $modus;
}
// testen
$array1 = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13);
$array2 = array(1, 2, 3, 4, 5, 6, 7, 9, 9, 9, 9, 9, 9);
$array3 = array("bol", "bol", "bol", "bol", "bol", "bol", "bol", "bol", "bol", "bol", "bol", "bol", "bol", "bol");
echo "<h2>Arraya:</h2>";
echo "<pre>";
echo "<br>";
print_r($array1);
echo "<br>";
print_r($array2);
echo "<br>";
print_r($array3);
echo "</pre>";
echo "<br>";
echo "<h2>Modus</h2>";
echo "<pre>";
echo "ZONDER SORT_ASC<br>";
print_r(modus($array1, $array3));
echo "<br><br>MET SORT_ASC<br>";
print_r(modus($array1, $array2, $array3, SORT_ASC));
echo "</pre>";
echo "<br>";
?>