【问题标题】:PHP Iterating through array errorPHP遍历数组错误
【发布时间】: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


【解决方案1】:

这应该可以工作

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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-23
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 2011-05-23
    • 2012-11-14
    相关资源
    最近更新 更多