2016-06-23 3 views
2

Я использую array_walk_recursive, чтобы применить htmlspecialchars к моему значению массива, но это не сработало, htmlspecialchars работает, когда я использую его manully; Вот мой код:array_walk_recursive не может работать, когда я использую функцию htmlspecialchars?

$new[] = "<a href='test'>Test</a><li><div>"; 
var_dump(array_walk_recursive($new,'htmlspecialchars')); // true 
var_dump($new) ; // no change 
+1

Может быть полезно http://stackoverflow.com/questions/2002710/php-how-to-perform-htmlspecialchar-on-an-array-of-arrays – Terminus

+0

@Terminus Я решил это, ТНХ !!! – Yuga

ответ

1

В определении array_walk_recursive:

array_walk_recursive - Применить пользовательскую функцию рекурсивно к каждому элементу массива

Так что вам нужно, чтобы создать определенную пользователем функцию, которая использует htmlspecialchars, как это :

$new[] = "<a href='test'>Test</a><li><div>"; 
array_walk_recursive($new, "specialChars"); 
var_dump($new); 

function specialChars(&$value) { 
    $value = htmlspecialchars($value); 
} 

И это будет печатать:

array (size=1) 
    0 => string '&lt;a href='test'&gt;Test&lt;/a&gt;&lt;li&gt;&lt;div&gt;' (length=56) 
1

Это потому, что исходный массив не изменяется, если вы не измените его самостоятельно в функции обратного вызова.

Ваша функция обратного вызова в основном:

function($item, $key) { 
    htmlspecialchars($item); 
} 

Так в то время как функция вызывается, ничего не хранится и исходный массив не изменяется.

Если вы хотите изменить значение в функции, вы можете передать его по ссылке:

function(&$item, $key) { 
    $item = htmlspecialchars($item); 
} 

Так что результат будет выглядеть так:

$new[] = "<a href='test'>Test</a><li><div>"; 
array_walk_recursive($new, function(&$item, $key) { 
     $item = htmlspecialchars($item); 
}); 
var_dump($new) ; // change! 

Конечно, Вы можете определить отдельный если вы предпочтете это.