Как вы копируете массив, сохраняя при этом те же ключи? - PullRequest
0 голосов
/ 11 сентября 2009

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

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

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

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. Очевидно, что ключи в массиве будут именами полей базы данных, и моя функция в настоящее время заменяет их числовыми значениями.

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

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

Ответы [ 2 ]

3 голосов
/ 11 сентября 2009

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

function html_safe($input) {
    if (is_array($input)) {
        return array_map('html_safe', $input);
    } else {
        return htmlspecialchars($input);
    }
}
1 голос
/ 11 сентября 2009

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

в моих циклах foreach не было указано никаких ключей, например:

foreach($array_val as $val)

вместо:

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

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

...