array_walk() 是做什么的?
What does array_walk() do?
我不明白 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;
?>
无论我使用与否似乎都不会改变输出。
PHP's array_walk function calls the specified function on every object on an array, so in the case array_walk($arr, 'intval');
you are converting every value in the array to an integer, because that's what the intval 功能正常。
它的目的是应该将$arr
的每一项转换为整数。
但它并没有这样做!
请注意,将 array_walk 与 intval
一起使用是不合适的。
互联网上有很多示例建议使用以下代码安全地转义整数数组:
<?php
array_walk($arr, 'intval'); // does nothing in PHP 5.3.3
?>
它适用于 一些 较旧的 PHP 版本 (5.2),但它违反规范。由于 intval()
没有修改它的参数,但是 returns 修改了结果,上面的代码对数组没有影响。
您可以改用以下内容:
<?php
$arr = array_map('intval', $arr);
?>
或者如果你坚持使用array_walk
:
<?php
array_walk($arr, function(&$e) { // note the reference (&)
$e = intval($e);
});
?>
我不明白 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;
?>
无论我使用与否似乎都不会改变输出。
PHP's array_walk function calls the specified function on every object on an array, so in the case array_walk($arr, 'intval');
you are converting every value in the array to an integer, because that's what the intval 功能正常。
它的目的是应该将$arr
的每一项转换为整数。
但它并没有这样做!
请注意,将 array_walk 与 intval
一起使用是不合适的。
互联网上有很多示例建议使用以下代码安全地转义整数数组:
<?php
array_walk($arr, 'intval'); // does nothing in PHP 5.3.3
?>
它适用于 一些 较旧的 PHP 版本 (5.2),但它违反规范。由于 intval()
没有修改它的参数,但是 returns 修改了结果,上面的代码对数组没有影响。
您可以改用以下内容:
<?php
$arr = array_map('intval', $arr);
?>
或者如果你坚持使用array_walk
:
<?php
array_walk($arr, function(&$e) { // note the reference (&)
$e = intval($e);
});
?>