2014-03-13 93 views
0

我有关于以下代码问题: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] => Array([fname] => John [lname] => D''oe)[customer2] =>数组([name] =>数组([数组]) [fname] => John [lname] => D'oe)[地址] => 1234 street [phone] => 1234567899))

我的问题是为什么我没有收到第二个“D'OE”作为“D''oe”

如果我在函数中回显每个值而不是添加到干净的数组中,它会将第二个“'”添加到“D'oe”中。我不知道什么是缺少的...请帮助。

UPDATE:

我想通了这个问题,提出更新的代码。如果$ val是一个数组,我没有将$ clean [$ key]设置为等于escape_quote($ val)。

+0

“escape_quote($ VAL);” - 你不把结果分配给任何东西。 – Danack

+0

请参阅我的更新,如果$ val是一个数组,我没有分配与clean数组相同的迭代。现在就工作,谢谢大家! – pixelpusher

回答

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