Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在多维数组上应用函数?_Php_Arrays_Multidimensional Array - Fatal编程技术网

Php 如何在多维数组上应用函数?

Php 如何在多维数组上应用函数?,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,为了安全起见,我使用了一些php函数 function whileToArray($qr) { while($rs = mysql_fetch_assoc($qr)) { $data[] = $rs; } $data = array_map('htmlspecialchars_decode',$data); $data = array_map('htmlentities',$data)

为了安全起见,我使用了一些php函数

function whileToArray($qr)
    {
        while($rs = mysql_fetch_assoc($qr))
        {
            $data[] = $rs;
        }
        $data = array_map('htmlspecialchars_decode',$data);
        $data = array_map('htmlentities',$data);
        return $data;
    }
当我运行这个代码时,我得到

Warning: htmlspecialchars_decode() expects parameter 1 to be string, array given in C:\AppServ\www\bigbeng\classes\get.class.php on line 22
Warning: htmlspecialchars_decode() expects parameter 1 to be string, array given in C:\AppServ\www\bigbeng\classes\get.class.php on line 22
打印(数据):
如何在数组中使用这些函数?

您应该在内部
循环中移动解码逻辑,而
循环:

function whileToArray($qr)
{
    while($rs = mysql_fetch_assoc($qr))
    {
        $rs = array_map('htmlspecialchars_decode',$rs);
        $rs = array_map('htmlentities',$rs);
        $data[] = $rs;
    }
    return $data;
}

但这是一种非常不正确的方法。您的逻辑假设数据库中存储的所有数据都是HTML编码的;ID、数值、时间戳等等。您不应该对数据库中的任何数据进行HTML编码,仅当您确实希望在HTML中嵌入值时才应执行HTML编码。

您应该在内部
循环中移动解码逻辑,而
循环:

function whileToArray($qr)
{
    while($rs = mysql_fetch_assoc($qr))
    {
        $rs = array_map('htmlspecialchars_decode',$rs);
        $rs = array_map('htmlentities',$rs);
        $data[] = $rs;
    }
    return $data;
}
但这是一种非常不正确的方法。您的逻辑假设数据库中存储的所有数据都是HTML编码的;ID、数值、时间戳等等。您不应该对数据库中的任何数据进行HTML编码,仅当您确实希望在HTML中嵌入值时才应执行HTML编码。

适用于1D数组,而不是多维数组。因此,请尝试使用下面的函数

function array_map_recursive($fn, $arr) {
    $rarr = array();
    foreach ($arr as $k => $v) {
        $rarr[$k] = is_array($v)
            ? array_map_recursive($fn, $v)
            : $fn($v); // or call_user_func($fn, $v)
    }
    return $rarr;
}
然后打电话

 $data = array_map_recursive('htmlspecialchars_decode',$data);
适用于一维数组,不适用于多维数组。因此,请尝试使用下面的函数

function array_map_recursive($fn, $arr) {
    $rarr = array();
    foreach ($arr as $k => $v) {
        $rarr[$k] = is_array($v)
            ? array_map_recursive($fn, $v)
            : $fn($v); // or call_user_func($fn, $v)
    }
    return $rarr;
}
然后打电话

 $data = array_map_recursive('htmlspecialchars_decode',$data);

粘贴打印($data)
的结果我认为,
$data
是多维关联数组。无论如何,你不应该在数据库中保留HTML编码的数据
htmlencode()
只能在您实际希望将数据嵌入HTML的位置调用。@lanzz我在打印数据时使用htmlspecialchars\u decode。在数据库结果上调用
htmlspecialchars\u decode()
表明您显然已经拥有数据
htmlspecialchars()
-将其插入数据库时进行编码。这不是一个好方法。粘贴打印($data)
的结果我认为
$data
是多维关联数组。无论如何,你不应该在数据库中保留HTML编码的数据
htmlencode()
只能在您实际希望将数据嵌入HTML的位置调用。@lanzz我在打印数据时使用htmlspecialchars\u decode。在数据库结果上调用
htmlspecialchars\u decode()
表明您显然已经拥有数据
htmlspecialchars()
-将其插入数据库时进行编码。这不是一个好办法。