почему это
$trader_details = array_walk($trader_details, 'htmlspecialchars');
дать эту ошибку?
Severity: Warning Message: htmlspecialchars() expects parameter 2 to be long, string given
afaik htmlspecialchars имеет только дополнительные параметры, кроме входной строки? это работает в codeigniter
спасибо
Функция обратного вызова, переданная в array_walk
ожидает, что вторым параметром будет ключ элемента массива:
Как правило, funcname принимает два параметра. Значение параметра массива является первым, а ключ / индекс вторым.
Но htmlspecialchars
ожидает, что вторым параметром будет стиль цитирования (обычно указанный одной из констант ENT_*
целочисленного типа).
array_map
этого попробуйте array_map
. Он просто использует значения массива.
array_walk передает по два аргумента по умолчанию. Первое – это значение элемента массива, второе – это элемент элемента массива. Он пытается передать ключ массива в качестве второго аргумента htmlspecialchars, который ожидает, что второй аргумент будет целым числом, определяющим стиль цитирования.
http://uk.php.net/array_walk говорит:
имя_функции
Как правило, funcname принимает два параметра. Значение параметра массива является первым, а ключ / индекс вторым .
Вероятно, вы ищете aray_map . Также обратите внимание, что htmlspecialchars () по умолчанию использует iso-8859-1 в качестве кодировки. Если ваш выход, например, закодирован в utf-8, вы должны передать эту информацию в качестве третьего параметра в htmlspecialchars. В противном случае результат может быть неправильным.
php 5.3:
$foo = array_map( function($x) { return htmlspecialchars($x, ENT_QUOTES, 'utf-8'); }, $trader_details );
Я полагаю, что $ trader_details – это массив строк? Второй параметр htmlspecialchars () – это целочисленный тип, для конкретного использования катштиля.
Вероятно, вы захотите использовать array_map . Если $ trader_details – это двумерный массив, отправьте его, чтобы мы могли видеть, что вы пытаетесь сделать.
array_walk передает 2 аргумента вашему методу (htmlspecialchars), сначала значение текущего элемента массива, второе – это ключ текущего элемента.
так что если
$trader_details = array('key' => 'value');
тогда
$trader_details = array_walk($trader_details, 'htmlspecialchars');
звонки
htmlspecialchars('value', 'key')
И это неверно, htmlspecialchars требует, чтобы второй параметр был целым числом – int $ quote_style
Я не думаю, что он будет делать то, что вы хотите, даже если это сработает.
Функция htmlspecialchars () не изменяет строку, она просто возвращает новую строку с изменениями. Прогулка массива не повлияет.
Ошибка очевидна … Второй аргумент array_walk – это вызов функции, и функция должна иметь 2 параметра. первый для значения и второй для ключа.