2009-09-11 3 views
0

Хорошо. Я написал простую (ish) функцию, чтобы принять аргумент и вернуть тот же аргумент с заменой символов html на свои объекты символов.Как вы копируете массив, сохраняя одни и те же ключи?

Функция может принимать в качестве аргумента строку, массив или 2D-массив - трехмерные массивы или больше не поддерживаются.

Функция выглядит следующим образом:

public function html_safe($input) 
{ 
    if(is_array($input)) //array was passed 
    { 
     $escaped_array = array(); 
     foreach($input as $in) 
     { 
      if(is_array($in)) //another array inside the initial array found 
      { 
       $inner_array = array(); 
       foreach($in as $i) 
       { 
        $inner_array[] = htmlspecialchars($i); 
       } 
       $escaped_array[] = $inner_array; 
      } 
      else 
       $escaped_array[] = htmlspecialchars($in); 
     } 
     return $escaped_array; 
    } 
    else // string 
     return htmlspecialchars($input); 
} 

Эта функция делает работу, но проблема в том, что мне нужно, чтобы сохранить ключи массива исходного массива.

Цель этой функции состояла в том, чтобы сделать это так, чтобы мы могли буквально передать результирующий набор из запроса базы данных и вернуть все значения с сохраненными HTML-символами. Очевидно, поэтому ключи в массиве будут именами полей базы данных, и моя функция в данный момент заменяет их числовыми значениями.

Так что да, мне нужно вернуть тот же аргумент, который передается функции с оставшимися массивами ключей (если массив был передан).

Надеюсь, что имеет смысл, предложения оценены.

ответ

3

Вы можете использовать рекурсию, а не гнездятся нагрузок foreaches:

function html_safe($input) { 
    if (is_array($input)) { 
     return array_map('html_safe', $input); 
    } else { 
     return htmlspecialchars($input); 
    } 
} 
+0

Эй это работает локально, но когда я развертывается в среде Dev я получил следующее сообщение об ошибке: Предупреждение: array_map() [function.array -map]: Первый аргумент «html_safe» должен быть либо NULL, либо действительным обратным вызовом в ... \ www \ include \ security.php в строке 16 – Evernoob

+0

@Evernoob: weird, версия PHP такая же? –

1

Хорошо, я думаю, что я понял, это один из самого ...

моей Foreach петли не имеют какие-либо ключей, указанные, например, они были:

foreach($array_val as $val) 

вместо:

foreach($array_val as $key => $val) 

В этом случае я мог бы сохранить ключи массива в выводах.

Смежные вопросы