User Tools

Site Tools


php:functions:filterinputdefaults

[PHP] filterInputDefaults

Erweiterung zu filter_input_array()

Funktion

filterInputsDefaults.php
<?php
/**
* mpl           by ERB software
* @author       stefan.erb(at)erb-software.com
*/
 
/**
 * filterInputDefaults
 * erweitert filter_input_array um 'default'
 * Siehe dazu auch die Doku zu filter_input_array
 * http://ch2.php.net/manual/de/function.filter-input-array.php
 * @param   int $type       Einer von INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV, INPUT_SESSION oder INPUT_REQUEST
 * @param   array $args
 * @return  array
 * @example
 *         // $_GET -> Array([file] = 'test.png', [size] = 100, [test] = 'ungültiger Eintrag')
 *         // eine Definition für filter_input_array() erweitert um die Einträge 'default'
 *         $definition = array(
 *                   'file'      =>  FILTER_SANITIZE_STRING,
 *                   'size'      =>  array(
 *                                       'filter' => FILTER_VALIDATE_INT,
 *                                       'options' => array('min_range' => 30, 'max_range' => 200),
 *                                       'default' => 80),
 *                   'type'      =>  array(
 *                                       'filter'    => FILTER_VALIDATE_REGEXP,
 *                                       'options'   => array('regexp' => '/^(?:fit|stretch|cut)$/'),
 *                                       'default'   => fit)); 
 *          $get = filterInputDefaults(INPUT_GET, $definition);
 *          // $get -> Array([file] = 'test.png', [size] = 100, [type] = 'fit')
 */
function filterInputDefaults($type, $definition ){ 
	// filter_input_array normal ausführen
	$myInputs = filter_input_array($type, $definition);
	// Falls keine Parameter übrig bleiben, die Inputs als leeren Array definieren
	if(!is_array($myInputs)) $myInputs = array();
	// Die fehlenden Parameters ermitteln
	$diff = array_diff_key($definition, $myInputs);
	// Ein Array mit den fehlenden Paramters erstellen, values = NULL
	$diff = array_fill_keys(array_keys($diff), NULL); 
	$myInputs = array_merge($myInputs, $diff);  
	//Für jeden Eintrag prüfen: falls kein Wert vorhanden ist und ein 'default' definiert ist, diesen nehmen 
	array_walk($myInputs, create_function('&$item, $key, $args', '$item = (is_null($item) && is_array($arg=$args[$key])) ? $arg["default"] : $item;'), $definition);
	return $myInputs;
}    
?>
php/functions/filterinputdefaults.txt · Last modified: 09.12.2013 09:39:54 (external edit)