Como você replicar um array mantendo as mesmas chaves?
-
05-07-2019 - |
Pergunta
Ok. Eu escrevi uma função simples (ish) para tirar um argumento e retornar o mesmo argumento com os personagens perigo html substituídos por suas entidades de caracteres.
A função pode tomar como um argumento uma string, um array ou uma matriz 2D -. Matrizes 3d ou mais não são suportadas
A função é a seguinte:
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);
}
Esta função faz o trabalho, mas o problema é que eu preciso para manter as chaves de matriz da matriz original.
O objetivo desta função era torná-lo assim que poderia literalmente passar um conjunto de resultados de uma consulta de banco de dados e receber de volta todos os valores com os caracteres HTML feito seguro. Obviamente, portanto, as chaves na matriz serão os nomes dos campos de banco de dados e minha função no momento é substituir estes com valores numéricos.
Então, sim, eu preciso voltar o mesmo argumento passado para a função com as chaves de matriz ainda intacto (se um array foi aprovada).
A esperança que faz sentido, sugestões apreciado.
Solução
Você pode usar recursão em vez de cargas de nidificação de foreaches:
function html_safe($input) {
if (is_array($input)) {
return array_map('html_safe', $input);
} else {
return htmlspecialchars($input);
}
}
Outras dicas
Ok eu acho que já figurou este para fora eu mesmo ...
meus foreach loops não tem nenhum chaves especificadas por exemplo, eles foram:
foreach($array_val as $val)
em vez de:
foreach($array_val as $key => $val)
caso em que eu poderia ter chaves do array preservadas nos arrrays saída.