2014-03-13 92 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; 
}