【问题标题】:What does array_walk() do?array_walk() 有什么作用?
【发布时间】:2016-10-09 16:34:56
【问题描述】:

我不明白array_walk($arr, 'intval'); 做了什么,我已经在下面的代码 sn-p 中注释掉了:

<?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 arrays array-walk


【解决方案1】:

它的意图是应该$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);
});
?>

【讨论】:

    【解决方案2】:

    PHP's array_walk 函数对数组中的每个对象调用指定的函数,因此在 array_walk($arr, 'intval'); 的情况下,您将数组中的每个值都转换为整数,因为这就是 intval 函数的作用。

    【讨论】:

    • 由于intval()不修改其参数,所以与array_walk一起使用时对数组没有影响!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    相关资源
    最近更新 更多