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

时间:2012-07-17 08:48:20

标签: 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);
        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

的print_r($数据):

Array ( [0] => Array ( [kategori_id] => 1 [kategori_adi] => Spor )
        [1] => Array ( [kategori_id] => 2 [kategori_adi] => Siyaset ) )

如何将这些函数用于数组?

2 个答案:

答案 0 :(得分:2)

您应该将解码逻辑移到内部while循环中:

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编码。

答案 1 :(得分:2)

array_map适用于不在多维数组上的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);
相关问题