我对以下代码有疑问:
PHP函数,接受一个数组,递归循环遍历每个级别,如果找到单引号则执行字符串替换并返回数组。
function escape_quote($data)
{
$clean = array();
foreach ($data as $key=>$val)
{
if (is_array($val))
{
$clean[$key] = escape_quote($val);
} else {
$val = str_replace("'", "''", $val);
$clean[$key] = $val;
}
}
return $clean;
}
以下是我传递的数据数组:
$vars = array
(
'customer1' => array
(
'fname' => 'John',
'lname' => "D'oe"
),
'customer2' => array
(
'name' => array
(
'fname' => 'John',
'lname' => "D'oe"
),
'address' => '1234 street',
'phone' => '1234567899'
)
);
我调用该函数并将数组传递给它:
$output = escape_quote($vars);
print_r($output);
我在屏幕上的输出:
数组([customer1] =>数组([fname] => John [lname] => D'oe)[customer2] =>数组([name] =>数组([fname] =>约翰[lname] => D'oe)[地址] => 1234街道[电话] => 1234567899))
我的问题是为什么我没有得到第二个“D'oe”作为“D'oe”返回
如果我回显函数中的每个值而不是添加到clean数组,它会将第二个“'”添加到“D'oe”。我不确定缺少什么......请帮助。
更新
我想出了问题,对代码进行了更新。如果$ val是一个数组,我没有将$ clean [$ key]设置为等于escape_quote($ val)。
答案 0 :(得分:2)
这应该有效
function escape_quote($data)
{
$clean = array();
foreach ($data as $key=>$val)
{
$set = false;
if (is_array($val))
{
$set = true;
$val = escape_quote($val);
}
if(!$set){
$val = str_replace("'", "''", $val);
}
$clean[$key] = $val;
}
return $clean;
}