<?php

//=========== Laplace, uses row averages ==============//
function da_laplace$data )
{
    
$max 0$maxk 0;
    foreach( 
$data as $k1=>$row )
    {
        
$row_sum 0;
        
$n 0;
        foreach( 
$row as $k2=>$cell )
        {
            
$row_sum += $cell;
            
$n       += 1;
        }
        
$data [$k1][] = $row_sum '/' $n;
        
$row_avg $row_sum $n;
        
        if( ( 
is_null($max) || $row_avg $max ) && !is_null($cell) )
        { 
$max $row_avg$maxk $k1; }
    }
    
    
$data [$maxk][ count($data[$maxk])-] = Array( $data [$maxk][ count($data[$maxk])-], 'hlite_1' );
    
    return 
$data;
}

//=========== Savage's: Calculate Column Maxes ==============//
function da_savage_max$data, &$output_maxes )
{
    
$maxes = Array();
    foreach( 
$data as $k1=>$row )
    {
        foreach( 
$row as $k2=>$cell )
        {
            if( !isset(
$maxes[$k2][0]) || $cell $maxes[$k2][0] )
            { 
$maxes[$k2] = Array( $cell'hlite_2' ); }
        }
    }
    
    
$data []= $maxes;
    
    
$output_maxes $maxes;
    
    return 
$data;
}

//=========== Savage's: Calculate Cell Values ==============//
function da_savage_subtract$data, &$maxes )
{
    
$data2 = Array();
    foreach( 
$data as $k1=>$row )
    {
        foreach( 
$row as $k2=>$cell )
        {
            
$data2 [$k1][$k2] = $maxes[$k2][0] - $cell;
        }
    }
    
    return 
$data2;
}

//=========== Savage's: Calculate Result Column Min ==============//
function da_savage_min$data )
{
    
$min null$mink = Array();
    
    foreach( 
$data as $k1=>$row )
    {
        
$max null$maxk = Array();
        foreach( 
$row as $k2=>$cell )
        {
            if( ( 
is_null($max) || $cell $max ) && !is_null($cell) )
            { 
$max $cell$maxk = Array($k1,$k2); }
        }
        
$data [$k1][]= Array( $max );
        
$data [$k1][$maxk[1]] = Array( $data [$k1][$maxk[1]], 'hlite_2' );
        
        if( ( 
is_null($min) || $max $min ) && !is_null($max) )
        { 
$min $max$mink = Array($k1,$maxk[1]); }
    }
    
    
$data [$mink[0]][$k2+1] = Array( $data [$mink[0]][$k2+1][0], 'hlite_1' );
    
    return 
$data;
}

//=========== Wald's: Min of row, max of result column ==============//
function da_walds$data )
{
    
$max null$maxk = Array();
    
    foreach( 
$data as $k1=>$row )
    {
        
$min null$mink = Array();
        foreach( 
$row as $k2=>$cell )
        {
            if( ( 
is_null($min) || $cell $min ) && !is_null($cell) )
            { 
$min $cell$mink = Array($k1,$k2); }
        }
        
$data [$k1][]= Array( $min );
        
$data [$k1][$mink[1]] = Array( $data [$k1][$mink[1]], 'hlite_2' );
        
        if( ( 
is_null($max) || $min $max ) && !is_null($min) )
        { 
$max $min$maxk = Array($k1,$mink[1]); }
    }
    
    
$data [$maxk[0]][$k2+1] = Array( $data [$maxk[0]][$k2+1][0], 'hlite_1' );
    
    return 
$data;
}