Что делает 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);
});
?>
4

Другие решения

PHP array_walk Функция вызывает указанную функцию для каждого объекта в массиве, поэтому в случае array_walk($arr, 'intval'); вы конвертируете каждое значение в массиве в целое число, потому что это то, что intval функция делает.

0

По вопросам рекламы [email protected]