有人可以向我解釋爲什麼您無法傳遞密鑰作爲參考?通過引用傳遞密鑰和值的替代方案:
例:
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()函數轉義key和value。
陣圖是我很難理解:
我試圖與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
爲什麼它不危險?您可以輕鬆更改表單上的$ _POST鍵,或使用類似Tamperdata的鍵。我在mysql查詢中使用的一些鍵。 – Ben
我沒有說他們不能。我說你需要解釋爲什麼在你的應用程序中*一個鍵可能是危險的。這將告訴我們使用您的情況的最佳方法。 – webbiedave