Что делает array_walk()?
Я не понимаю что array_walk($arr, 'intval');
делает, что я прокомментировал в следующем фрагменте кода:
<?php
$handle = fopen ("php://stdin","r");
fscanf($handle,"%d",$n);
$arr_temp = fgets($handle);
$arr = explode(" ",$arr_temp);
//array_walk($arr,'intval');
$sum=0;
foreach($arr as $i)
{
$sum = $sum + $i;
}
echo $sum;
?>
Если я использую это или нет, кажется, не изменить вывод.
2 ответа
Намерение этого состоит в том, что это должно преобразовать каждый элемент $arr
целое число
Но это не так!
Обратите внимание, что использование array_walk с intval
неуместно
В Интернете есть много примеров, которые предлагают использовать следующий код для безопасного экранирования массивов целых чисел:
<?php
array_walk($arr, 'intval'); // does nothing in PHP 5.3.3
?>
Он работает в некоторых старых версиях PHP (5.2), но не соответствует спецификациям. поскольку intval()
не изменяет свои аргументы, но возвращает измененный результат, приведенный выше код не влияет на массив.
Вместо этого вы можете использовать следующее:
<?php
$arr = array_map('intval', $arr);
?>
Или если вы настаиваете на использовании array_walk
:
<?php
array_walk($arr, function(&$e) { // note the reference (&)
$e = intval($e);
});
?>
Функция PHP array_walk вызывает указанную функцию для каждого объекта в массиве, поэтому в данном случае array_walk($arr, 'intval');
вы конвертируете каждое значение в массиве в целое число, потому что это то, что делает функция intval.