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

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

Пример:

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

Любые альтернативы?

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

Потому что язык не поддерживает это. Вам будет трудно найти эту способность на большинстве языков, отсюда и термин ключ .

Так я застрял с чем-то вроде этого?

Да. Лучший способ – создать новый массив с соответствующими ключами.

Любые альтернативы?

Единственный способ обеспечить лучшие альтернативы – это знать вашу конкретную ситуацию. Если ваши ключи сопоставляются с именами столбцов таблицы, лучший подход заключается в том, чтобы оставить ключи как есть и избежать их при их использовании в вашем SQL.

почему это проблема? Сделайте это функцией. Функция принимает вход и дает выход. Ваш ввод функции будет вашим «незащищенным» массивом. Ваш результат будет результатом защиты массива.

Тогда вы просто делаете

 $where = secureMyArray($where); 

Вот почему у вас есть возможность создавать функции …