Scripts

modus()

Als gevolg op average() is er nu modus(). Deze functie telt hoeveel keer iedere waarde voorkomt in de opgegeven argumenten en geeft de waarde die het meeste keren voorkomt terug. Optioneel kan ook worden teruggegeven hoeveel keren dat is.

modus
Syntax:
[b]mixed modus(mixed $var1 [, mixed $var2 [, mixed $var3...]];[/b]

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:

<?php

// 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>";
?> 

Reacties

0
Nog geen reacties.