Как вы реплицируете массив, сохраняя при этом одни и те же ключи?

StackOverflow https://stackoverflow.com/questions/1411473

Вопрос

ОК.Я написал простую (ish) функцию, которая принимает аргумент и возвращает тот же аргумент с опасными html-символами, замененными их символьными сущностями.

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

Функция заключается в следующем:

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

foreach($array_val as $val)

вместо того , чтобы:

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top