Альтернативы для передачи ключа и значения по ссылке:

Может ли кто-нибудь объяснить мне, почему вы не можете передать ключ в качестве ссылки?

Пример:

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);

Какие-нибудь альтернативы?

8
задан Ben 30 September 2011 в 22:08
поделиться