Может кто-нибудь объяснить мне, почему вы не можете передать ключ в качестве ссылки?
Ex:
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)
приведет к значению другого существующего ключа? Вы просто перезаписываете существующий ключ? Вам нужно объяснить, почему в вашем приложении ключ может быть опасен. - person webbiedave   schedule 01.10.2011