同じキーを保持しながらアレイをどのように複製しますか?
-
05-07-2019 - |
質問
わかりました。引数を取り、危険なhtml文字を文字エンティティに置き換えて同じ引数を返す単純な(ish)関数を作成しました。
この関数は、文字列、配列、または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文字を安全にしてすべての値を取得できるようにすることでした。したがって、明らかに、配列内のキーはデータベースフィールドの名前になり、現在の私の機能はこれらを数値に置き換えています。
そうです、配列キーがそのままの状態で関数に渡された同じ引数を取り戻す必要があります(配列が渡された場合)。
意味のある希望、提案を歓迎します。
解決
foreachの負荷をネストするのではなく、再帰を使用できます。
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)
その場合、出力配列に配列キーを保存できます。
所属していません StackOverflow