キーを参照として渡すことができない理由を説明できますか?キーと値の両方を渡すための代替方法参照先:
例:
if(is_array($where)){
foreach($where as &$key => &$value){
$key = sec($key);
$value = sec($value);
}
unset($key, $value);
}
例外:
Fatal error: Key element cannot be a reference in linkstest.php on line 2
は私がarray_mapを使用して、同様の何かを行うことができますか? 私がやりたいことは、連想配列を反復し、sec()関数でキーと値の両方をエスケープすることです。私が理解するために
アレイマップは困難である:
私はarray_mapを持つ多くのことを試してみましたが、私はそれが直接のキーに基づいて行動することができません。
foreachループを使用するだけでなく、配列マップを使用してパフォーマンスを向上させることはできますか?私はforeachのについては好きではない何
は、私が直接配列に作用し、一時的な配列を作成し、それらを設定解除に対処する必要がないということです。
foreach($where as $key => $value){
$where[secure($key)] = secure($value);
}
それが何かを見つけた場合、これが失敗する可能性がありますキーでエスケープし、新しい要素を追加し、エスケープされていない要素を保持します。
私はこのようなことにこだわりましたか?
$temparr = array();
foreach($where as $key => $value){
$temparr[secure($key)] = secure($value);
}
$where = $temparr;
unset($temparr);
代替手段はありますか?
これは大きな古い*理由*に値するでしょうか? 'sec($ key)'が別の既存のキーの値になったらどうなるでしょうか?既存のキーを上書きするだけですか?アプリケーションでキーが危険な理由を説明する必要があります。 – webbiedave
なぜ危険なことはできませんでしたか?フォーム上やTamperdataのようなもので$ _POSTキーを簡単に変更することができます。 mysqlクエリで使用するいくつかのキー。 – Ben
私は彼らができないと言っていませんでした。あなたのアプリケーション*で鍵が危険な理由を説明する必要があると言いました。それはあなたの状況に最適なアプローチを教えてくれるでしょう。 – webbiedave