【发布时间】:2014-03-13 22:08:01
【问题描述】:
我对以下代码有疑问:
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);
我在屏幕上的输出:
Array ([customer1] => Array ( [fname] => John [lname] => D''oe ) [customer2] => Array ( [name] => Array ( [fname] => John [lname ] => D'oe ) [address] => 1234 street [phone] => 1234567899 ) )
我的问题是为什么我没有将第二个“D'oe”返回为“D''oe”
如果我回显函数中的每个值而不是添加到干净的数组中,它会将第二个“'”添加到两个“D'oe”。我不确定缺少什么...请帮助。
更新:
我发现了问题,对代码进行了更新。如果 $val 是一个数组,我没有将 $clean[$key] 设置回等于 escape_quote($val)。
【问题讨论】:
-
"escape_quote($val);" - 你没有将结果分配给任何东西。
-
请查看我的更新,如果 $val 是一个数组,我没有将迭代分配为等于干净的数组。现在可以使用了,谢谢大家!
标签: php