PHP迭代数组错误

时间:2014-03-13 22:08:02

标签: php

我对以下代码有疑问:

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)。

1 个答案:

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