我正在尝试过滤 $_POST
数据,然后将其呈现为 HTML,即嵌套数组,深度约为三层。我的结构看起来像这样:
Array
(
[books] ==> Array
(
[book1] ==> Array
(
[0] ==> Title
[1] ==> Author
)
[book2] ==> Array
(
[0] ==> Title
[1] ==> Author
)
)
[articles] ==> Array
(
[article1] ==> Array
(
[0] ==> Journal
[1] ==> Title
)
[article2] ==> Array
(
[0] ==> Journal
[1] ==> Title
)
)
)
我有这样的直觉,有一种方法可以使用 foreach 循环和 filter_input_arrays (带有数组和清理参数),但我对 PHP 还很陌生,并且很难使用它。我已经成功过滤了其他数组,但我想知道是否有一种优雅的方式来迭代数组、过滤它们并返回具有相同结构的对象。
最佳答案
这将递归过滤您的数据并根据请求返回一个对象,在清理函数中选择您的过滤方法。您可以使用此函数深入多个级别,并具有不对称结构。
$arrayData = array (
'books' => array ( array ( 'Title1','Author1' ), array ( 'Title2','Author2' )),
'articles' => array ( array ( 'Journal3','Title3' ), array ( 'Journal3','Title3' ))
);
function arrayFilter($arrayIn){
$output = null;
if (is_array($arrayIn)){
foreach ($arrayIn as $key=>$val){
if (is_array($val)){
$output->{$key} = arrayFilter($val);
} else {
$output->{$key} = sanitize($val);
}
}
} else {
$output->{$key} = sanitize($val);
}
return $output;
}
function sanitize($val)
{
//insert your preferred data filter here
return addslashes('filtered: '.$val);
}
print_r (arrayFilter($arrayData));
输出:
stdClass Object
(
[books] => stdClass Object
(
[0] => stdClass Object
(
[0] => filtered: Title1
[1] => filtered: Author1
)
[1] => stdClass Object
(
[0] => filtered: Title2
[1] => filtered: Author2
)
)
[articles] => stdClass Object
(
[0] => stdClass Object
(
[0] => filtered: Journal3
[1] => filtered: Title3
)
[1] => stdClass Object
(
[0] => filtered: Journal3
[1] => filtered: Title3
)
)
)
关于php - 过滤嵌套数组 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11902395/