При переборе массива в цикле результат применения функции к элементам массива не сохраняется
Доброй ночи.
Помогите, пожалуйста.
Никак не могу понять как правильно очищается массив с помощью htmlentities сущностей.
Пример кода:
$x = ['hello'=> '<script>',
'world'=>'<?php echo Hello?>'];
foreach ($x as $v) {
$clean=htmlentities($v);
}
print_r($clean);
В данном случае в массиве 2 значения и они очищаются, но как только я добавляю 3-й ключ и 3-е значение, на выходе получается только последнее значение, 2 остальных пропадают.
Вот пример с 3-мя ключами, который выводит только последнее значение, а первые два - нет.
$x = ['hello'=> '<script>',
'world'=>'<?php echo Hello?>',
'ayco'=>'<style>'];
foreach ($x as $v) {
$clean=htmlentities($v);
}
print_r($clean);
В чем была не права?
Ответы (1 шт):
Вы не изменяете исходный массив, а создаёте новую переменную, которая перезаписывается при каждой итерации foreach, а выводится один раз после всех итераций, то есть выводится последнее её значение.
Чтобы изменить исходный массив, нужно на него ссылаться при помощи «&» (Присваивание по ссылке):
$array = [
'hello' => '<script>',
'world' => '<?php echo Hello?>',
'ayco' => '<style>'
];
foreach ($array as &$linked_value) {
$linked_value = htmlentities($linked_value);
}
print_r($array);
Или использовать ключи:
$array = [
'hello' => '<script>',
'world' => '<?php echo Hello?>',
'ayco' => '<style>'
];
foreach ($array as $key => $value) {
$array[$key] = htmlentities($value);
}
print_r($array);
Если вы пытаетесь предотвратить инъекции, вам не поможет htmlentities — почитайте ответы на вопрос «Грамотная защита от SQL-Injection»