filter_var_array()
は再帰をサポートしていません。しかし、なぜそれをしてはならないのか理由は分かりません。ここでは簡単な解決策です:
// 28 01 2010, Gajus Kuizinas
function hp_path_to_array($keys, $value, $data = array())
{
if(empty($keys))
{
return $value;
}
$key = array_shift($keys);
$data[$key] = hp_path_to_array($keys, $value, $data);
return $data;
}
function hp_filter_var_array($data, $rules)
{
$return = array();
foreach($rules as $k => $options)
{
$path = explode('[', str_replace(']', '', $k));
if(empty($path))
{
continue;
}
if(!is_array($options))
{
$filter = $options;
$options = array();
}
else
{
$filter = $options['filter'];
unset($options['filter']);
}
$value = $data;
foreach($path as $key)
{
if(isset($value[$key]))
{
$value = $value[$key];
}
else
{
$value = NULL;
break;
}
}
$return += hp_path_to_array($path, filter_var($value, $filter, $options));
unset($rules[$k]);
}
$return += filter_var_array($data, $rules);
return $return;
}
'filter_var_array()'は再帰的に機能しないため、 – BoltClock
数字(整数、倍精度など)はありますが、文字列ではそうは思いません。それは、文字列の配列をサニタイズしようとしているときに私を誤っているだけです。 – xil3