php - 过滤嵌套数组 PHP

标签 php arrays parsing filtering

我正在尝试过滤 $_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/

相关文章:

php - Laravel 数据库事务不工作

java - 有没有更好的方法将字符串数组转换为整数数组?

python - 有没有好方法在 numpy 数组上进行 "moving"计算?

javascript为变量分配错误的值

regex - 在 PowerShell 中组合两个正则表达式

php - mysql中数组的数据类型

php - MySQL 行(除了最后一行)是缩进的并且不可搜索? (加载数据文件)

Java:从 char 中解析 int 值

java - 将 HOCON 字符串转换为 Java 对象

php - 如何在 php 的邮件功能中插入 html、css 和 php