如何在保持相同键的同时复制数组?

时间:2009-09-11 15:06:07

标签: php arrays logic html-injections

确定。我写了一个简单的(ish)函数来获取一个参数并返回相同的参数,其中html字符被替换为其字符实体。

该函数可以将字符串,数组或2D数组作为参数 - 不支持3d数组或更多数组。

功能如下:

public function html_safe($input)
{   
    if(is_array($input)) //array was passed
    {
        $escaped_array = array();
        foreach($input as $in)
        {
            if(is_array($in)) //another array inside the initial array found
            {
                $inner_array = array();
                foreach($in as $i)
                {
                    $inner_array[] = htmlspecialchars($i);
                }
                $escaped_array[] = $inner_array;
            }
            else
                $escaped_array[] = htmlspecialchars($in);
        }
        return $escaped_array;
    }
    else // string
        return htmlspecialchars($input);
}

这个函数确实有效,但问题是我需要维护原始数组的数组键。

这个函数的目的是使它能够从字面上传递数据库查询的结果集,然后使用HTML字符安全地获取所有值。因此,显然,数组中的键将是数据库字段的名称,目前我的函数正在用数值替换它们。

所以是的,我需要返回传递给函数的相同参数,数组键仍然完整(如果传递了数组)。

希望有意义,建议赞赏。

2 个答案:

答案 0 :(得分:3)

您可以使用递归而不是嵌套大量的foreaches:

function html_safe($input) {
    if (is_array($input)) {
        return array_map('html_safe', $input);
    } else {
        return htmlspecialchars($input);
    }
}

答案 1 :(得分:1)

好的,我想我自己想出了这个......

我的foreach循环没有指定任何键,例如:

foreach($array_val as $val)

而不是:

foreach($array_val as $key => $val)

在这种情况下,我可以在输出arrrays中保留数组键。